假设我有一个像这样的单元格数组:
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')
我认为这个解决方案非常好 - 但是如果你有更好的方法,那就发布吧。它不需要很快,只需要易读和简单。
答案 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)).')