Matlab 在考虑某些余量的单元格字符串中查找值

Matlab 在考虑某些余量的单元格字符串中查找值,matlab,find,cell-array,binning,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.7200000000000

假设我有一个与一群人的身高相对应的字符串

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;
我想找到
身高
+-3cm范围内的人群指数

为了找到精确的匹配,我会这样做

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

如何将匹配项包括在前一范围(174-180)中


idx\u height
应该是=
[1 5 6 7]

您可以通过

那就

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

idx\u height=find(height>=height\u val-3&height假设高度精度保持在
0.01cm
,您可以将
str2double
ismember
组合用于一个班轮-

idx_height = find(ismember(str2double(height_str)*100,[height_val-3:height_val+3]))
  • str2double的神奇之处在于,它直接与单元格数组一起工作,以获得一个数字数组,而无需将该单元格数组转换为字符数组,然后再转换为数字数组

  • 在使用
    str2double
    之后,我们可以使用
    ismember
    ,正如您在问题中尝试的那样,将匹配项作为一个逻辑数组,其索引是通过
    find
    获取的。这就是整个过程


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

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

为什么不使用数字数组而不是单元格数组呢?@Divakar数据是给定的……也许str2doule
毕竟没那么糟糕。@chappjc对于这样的情况,获得数字数据是一条直路。太完美了!:)
idx_height = find(bsxfun(@le,str2double(height_str)*100,height_val+3) & ...
    bsxfun(@ge,str2double(height_str)*100,height_val-3))