按数字过滤Matlab单元格数会产生虚假错误

时间:2014-03-12 11:54:53

标签: arrays matlab select cells

我有一个大型数据集x,由16201 x 49个单元组成,第一行包含标签,例如:

'Entry1label' 'Entry2label', 'Entry3label', 'Entry4label'
'stimuli 1'   'stimuli 2'    0.1            10
'stimuli 1'   'stimuli 3'    0.1            10
'stimuli 2'   'stimuli 1'    0.1            40

第4列由值为10,20,40或60的单元格组成。所有列都有重复的条目(但列中有不同的组合)。我想过滤所有条目的单元格数组,例如' Entry4label',等于例如10。 我试过了:

x([x{2:end, 4}] == 10, :)

然而,这几乎可以起作用,每20个细胞就有一个值为40的细胞!类似地,如果我尝试20,我会得到10的虚假出现。如果我使用40,我会得到20的虚假出现,最后到60我得到一些(但很少),40s。

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:2)

<强>代码

out = x(find(cell2mat(x(2:end,4))== 10)+ 1,:)

<强>输出

out = 

    'stimuli 1'    'stimuli 2'    [0.1]    [10]
    'stimuli 1'    'stimuli 3'    [0.1]    [10]

问题是第一个元素是第四列的字符串。

答案 1 :(得分:2)

此处:x([x{2:end, 4}] == 10, :)

因为您要在列的子集中找到位置,所以它实际上将行偏移一。我猜你在那一列中的值大多是偶然的变化,因此它看起来好像匹配了大部分。

你可以把偏移量放回去:

x(find([x{2:end, 4}]==40)+1,:)