在嵌套单元格中搜索匹配的字符串并提供索引
Searching for a matched string within nested cell and delivering the index
我有一个嵌套元胞数组,称为
values
。 Description as an image。在此示例中,有 5 个子单元格。通常这个数字在 1 到 30 之间变化。每个单元格有两个子子单元格:
- 第一个,或
values{5,1}{1,1}
,始终只有一个字符值
(在本例中,TOTAL
或 MGS
)
- 第二个,或
values{5,1}{2,1}
,具有由两列组成的矩阵:左侧 - 温度值,右侧 - 物理特性。
我的目标是找到包含字符值 'TOTAL'
(values{5,1}
) 的子单元格,并以某种方式获取矩阵的索引(输出将是 values{5,1}{2,1}
)
为了应对挑战,我编写了自己的手工解决方案。如果在 a{5,1}{1,1}
中的 char 'TOTAL'
中存在该代码,并且在 298.15 K 旁边取相应的值,则此代码有效。但是,字符串 'TOTAL'
可能在其他地方。在这种情况下,我有一个问题。在这个解决方案中,双循环需要很长时间。那么,您是否有另一种解决方案如何找到 'TOTAL'
避免循环的单元格索引?
for m = 1:numel(values)
for n = 1:numel(values(m))
a = values(m);
if string(a{5,1}{1,1}) == 'TOTAL'
k = a{5,1}{2,1}(:,1); %column with temp numbers
n = 298.15; %RT
[~,~,idx] = unique(round(abs(k-n)));
minVal = k(idx==1);
valueAtRT = sprintf('%f', a{1,1}{5,1}(length(a{1,1}{5,1})+idx));
break;
end
end
end
感谢您的帮助。
假设只有一个单元格 'TOTAL'
:
我找到了解决方案
is = cellfun( @(cac) strcmp(cac{1},'TOTAL'), values, 'uniformoutput',false );
num = values{is}{2};
valueAtRT = interp1( num(:,1), num(:,2), 298.15, 'nearest', 'extrap' );
is
传递单元格的索引,其中存储 char 'TOTAL'
,第三行传递 298.15 旁边的值。
我有一个嵌套元胞数组,称为
values
。 Description as an image。在此示例中,有 5 个子单元格。通常这个数字在 1 到 30 之间变化。每个单元格有两个子子单元格:
- 第一个,或
values{5,1}{1,1}
,始终只有一个字符值 (在本例中,TOTAL
或MGS
) - 第二个,或
values{5,1}{2,1}
,具有由两列组成的矩阵:左侧 - 温度值,右侧 - 物理特性。
我的目标是找到包含字符值 'TOTAL'
(values{5,1}
) 的子单元格,并以某种方式获取矩阵的索引(输出将是 values{5,1}{2,1}
)
为了应对挑战,我编写了自己的手工解决方案。如果在 a{5,1}{1,1}
中的 char 'TOTAL'
中存在该代码,并且在 298.15 K 旁边取相应的值,则此代码有效。但是,字符串 'TOTAL'
可能在其他地方。在这种情况下,我有一个问题。在这个解决方案中,双循环需要很长时间。那么,您是否有另一种解决方案如何找到 'TOTAL'
避免循环的单元格索引?
for m = 1:numel(values)
for n = 1:numel(values(m))
a = values(m);
if string(a{5,1}{1,1}) == 'TOTAL'
k = a{5,1}{2,1}(:,1); %column with temp numbers
n = 298.15; %RT
[~,~,idx] = unique(round(abs(k-n)));
minVal = k(idx==1);
valueAtRT = sprintf('%f', a{1,1}{5,1}(length(a{1,1}{5,1})+idx));
break;
end
end
end
感谢您的帮助。
假设只有一个单元格 'TOTAL'
:
is = cellfun( @(cac) strcmp(cac{1},'TOTAL'), values, 'uniformoutput',false );
num = values{is}{2};
valueAtRT = interp1( num(:,1), num(:,2), 298.15, 'nearest', 'extrap' );
is
传递单元格的索引,其中存储 char 'TOTAL'
,第三行传递 298.15 旁边的值。