2017-07-01 115 views
-1

我有一个单元阵列D {7,x}有7行x列(直到现在还不知道)。Matlab:删除单元阵列元素(数据准备)

  • 在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的长度的循环,但我不知道如何删除组合出现的列,我根本不知道如何有效地执行它。

会真的感谢您的想法!

+1

显示迄今为止您尝试过的内容总是一个好主意,即包含for循环方法,并避免一次询问多个问题,即高效实现和删除列。它将会提供更好的可重用的问题和答案。 – m7913d

回答

2

对于循环是一个解决方案。请谨慎使用,当您使用作为循环来删除内容时,就是从循环开始。我使用你的第一个标准,因为在这个答案的例子:

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 

为了避免循环,你可能需要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) = []; 
+0

非常感谢!我认为这似乎工作。情况总是如此,当我删除某些东西时,我必须在最后开始一个循环? 所以现在我可以在循环中添加其他if语句或者创建4个或5个独立的ind变量,对吧?对于最后的情况,这将是这样的: ind4 = [D {7,:}] <0.2 | [D {7,:}]> 2; D(:, ind4)= []; ?? – LotteLi

+0

@LotteLi你懂了!从最后删除是一个简单的解决方案。如果从头开始循环,则需要创建要删除的索引,并在循环外删除它们。 –