【问题标题】:Check existence of certain row in Cell-Array in MATLAB在 MATLAB 中检查 Cell-Array 中是否存在某些行
【发布时间】:2013-12-08 08:55:18
【问题描述】:

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

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、第四列为@的行987654325@ - 怎么做?第一行应该被忽略,因为它只有列标题。

我想出了一个很奇怪的方法:

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

我认为这个解决方案非常好 - 但如果您有更好的方法,请发布它。它不需要很快,只需要可读和简单。

【问题讨论】:

    标签: arrays matlab cell exists


    【解决方案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)).')
    

    【讨论】:

    • 这也不错,但我更喜欢“ismember”,因为它更直观,因为函数名称会产生函数可能正在做的事情:)
    • @bjoern 好吧,对我来说,@eq 这个名字很直观 :-)
    • 是的,为什么不 ;-) 无论我接受与否,都没有区别,因此现在接受它;-)
    猜你喜欢
    • 2023-01-24
    • 2011-10-11
    • 2017-02-05
    • 2014-05-12
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2014-09-05
    • 2022-01-18
    相关资源
    最近更新 更多