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
同样直观:-)是的,为什么不;-)无论我接受与否,都没有区别,因此现在就接受它;-)