Arrays 在MATLAB中检查单元数组中某一行的存在性

Arrays 在MATLAB中检查单元数组中某一行的存在性,arrays,matlab,cell,exists,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

假设我有一个这样的单元阵列:

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')

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

这可能更简单:

all(bsxfun(@eq, cell2mat(data(2:end,1:4)), [1000 30 5 100]),2)
另一种可能性(可能较慢):


这也许更简单:

all(bsxfun(@eq, cell2mat(data(2:end,1:4)), [1000 30 5 100]),2)
另一种可能性(可能较慢):


它也很好,但我更喜欢“ismember”,因为它更直观,因为函数名会产生函数可能正在做的事情:)@bjoern好吧,对我来说,名称
@eq
同样直观:-)是的,为什么不;-)无论我接受与否,都没有区别,因此现在就接受它;-)它也很好,但我更喜欢“ismember”,因为它更直观,因为函数名会产生函数可能正在做的事情:)@bjoern好吧,对我来说,名称
@eq
同样直观:-)是的,为什么不;-)无论我接受与否,都没有区别,因此现在就接受它;-)