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