Matlab:删除Cell Array的元素(数据准备)

时间:2017-07-01 19:05:04

标签: arrays matlab cell

我有一个包含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循环,但我不知道如何删除组合出现的列,而且根本不知道如何有效地进行。

非常感谢您的想法!

1 个答案:

答案 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) = [];