在MATLAB中检查Cell-Array中某行的存在

时间:2013-11-23 12:45:24

标签: arrays matlab cell exists

假设我有一个像这样的单元格数组:

1x25 double   1x25 double   1x25 double   1x11 double   'Mean'
1000          0             0             5                0
1000          10            5             100              0    
1000          20            5             200              0    
1000          30            5             100              0    

现在我想检查此单元格数组中是否有任何行,其中第一列为1000,第二列为30,第三列为5第四列是100 - 如何做到这一点?第一行应该被忽略,因为它只有列标题。

我提出了一个非常奇怪的方法:

sum(sum([[data{2:end, 1}]'==1000  [data{2:end, 2}]'==30 [data{2:end, 3}]'==5 [data{2:end, 4}]'==100], 2)==4)

结果必须是> 0,以便至少出现一次数据 - 图案... 提前致谢

编辑:我想出了:

found = ismember([1000 30 5 100], cell2mat(data(2:end, 1:4)), 'rows')

我认为这个解决方案非常好 - 但是如果你有更好的方法,那就发布吧。它不需要很快,只需要易读和简单。

1 个答案:

答案 0 :(得分:1)

这可能更简单:

all(bsxfun(@eq, cell2mat(data(2:end,1:4)), [1000 30 5 100]),2)

另一种可能性(可能更慢):

arrayfun(@(n) all([data{n,1:4}]==[1000 30 5 100]),(2:size(data,1)).')