在考虑一些余量的单元格中查找值

时间:2014-10-31 13:45:51

标签: matlab find cell-array binning

假设我有一串与一组人的身高相对应的值

height_str ={'1.76000000000000';
'1.55000000000000';
'1.61000000000000';
'1.71000000000000';
'1.74000000000000';
'1.79000000000000';
'1.74000000000000';
'1.86000000000000';
'1.72000000000000';
'1.82000000000000';
'1.72000000000000';
'1.63000000000000'}

和单个身高值。

height_val = 177;

我想找到height_val + - 3cm范围内的人的指数。

要找到我想要的完全匹配

[idx_height,~]=find(ismember(cell2mat(height_str),height_val/100));

如何在之前的范围(174-180)中包含匹配项?

idx_height应为= [1 5 6 7]

3 个答案:

答案 0 :(得分:3)

您可以通过

将字符串转换为数字数组(如@Divakar所述)
height = str2num(char(height_str))*100; % in cm

然后只是

idx_height = find(height>=height_val-3 & height<=height_val+3);

答案 1 :(得分:1)

假设高度的精确度保持在0.01cm,您可以将str2doubleismember的组合用于单行 -

idx_height = find(ismember(str2double(height_str)*100,[height_val-3:height_val+3]))
  • str2double的神奇之处在于,它可以直接与单元格数组一起使用,从而无需将单元格数组转换为char数组再转换为数字数组。

  • 使用str2double后,我们可以在您的问题中尝试使用ismember来将匹配作为逻辑数组来获取,其索引将使用{{1}获取}。这真的是整个故事。

答案 2 :(得分:1)

延迟添加,但对于binning我的第一选择是使用bsxfun和逻辑操作:

idx_height = find(bsxfun(@le,str2double(height_str)*100,height_val+3) & ...
    bsxfun(@ge,str2double(height_str)*100,height_val-3))