我有一个包含7行和x列的Cell Array D {7,x}(直到现在才知道)。
在第4行中,索引编号为1和2。
在第5行中有索引字母A和B.
在第6行中有索引-1和1。
第7行有时候。
现在我想删除此数组中的无效数据:
如果第4行中有1;和第5行中的A;然后在第6行中输入1,然后删除该列。
1,B,-1和2,A,-1和2,B,1组合的相同原则(总是当这个三元组一起出现在一列中时)
和第7行:如果值是< 0.2或> 2(整列无效)。
最好的方法是什么? 我想到了D长度上的for循环,但我不知道如何删除组合出现的列,而且根本不知道如何有效地进行。
非常感谢您的想法!
答案 0 :(得分:2)
是一个解决方案。当您使用 for 循环删除内容时,请注意从最后开始循环。我在这个答案中使用你的第一个标准作为例子:
for i = size(D,2):-1:1
if D{4,i}==1 && strcmp(D{5,i}, 'A') && D{6,i}==1 % use {}
D(:,i) = [];
end
end
为了避免 for 循环,对于数字列,您可能需要 cell2mat 或[D {4,:}]:
ind = [D{4,:}]==1 & strcmp(D(5,:), 'A') & [D{6,:}]==1; % or
% ind = cell2mat(D(4,:))==1 & strcmp(D(5,:), 'A') & cell2mat(D(6,:))==1;
D(:, ind) = [];