You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中如何在元胞数组中定位包含指定数值与字符串的行

如何在MATLAB元胞数组中定位同时满足两个条件的行?

我来帮你搞定这个问题!你已经找到了两个条件各自对应的行索引,现在只需要把它们结合起来找到共同的目标行就行,而且我们可以用更自动化、通用的方法来实现,不用手动计算索引。

首先先明确你的元胞数组结构:

C = {6, 'Concrete', 0.37, 0.33; 
     6, 'Steel', 0.1, 0.1; 
     6, 'Lead', 0.057, 0.057; 
     10, 'Concrete', 0.41, 0.37; 
     10, 'Steel', 0.11, 0.11; 
     10, 'Lead', 0.057, 0.057; 
     15, 'Concrete', 0.44, 0.41; 
     15, 'Steel', 0.11, 0.11; 
     15, 'Lead', 0.057, 0.057};

方法一:直接针对列生成逻辑索引(最推荐)

因为你要找的条件分别对应第1列的数值6和第2列的字符串'Steel',我们可以直接对每一列做判断,然后取同时满足的行:

% 判断第1列元素是否等于6
is_col1_6 = cellfun(@(x) x == 6, C(:, 1));
% 判断第2列元素是否为'Steel'
is_col2_steel = strcmp(C(:, 2), 'Steel');
% 找到同时满足两个条件的行索引
target_row = find(is_col1_6 & is_col2_steel);
% 提取目标行的第3列元素
result = C{target_row, 3};

运行后target_row会得到2,result就是你要的0.1,完美对应C{2,3}。这种方法逻辑清晰,不管你的元胞数组行数怎么变都能正常工作,还能避免其他列出现相同数值或字符串的干扰。

方法二:基于你已有的索引求交集

如果你想沿用自己已经获取的索引,可以把两个条件对应的行索引求交集:

% 获取包含'Steel'的行索引(用mod替代手动减9,更通用)
steel_rows = mod(find(strcmp(C, 'Steel')) - 1, size(C, 1)) + 1;
% 获取第1列包含6的行索引(直接提取第1列转成矩阵判断,比[C{:}]更准确)
num6_rows = find(cell2mat(C(:, 1)) == 6);
% 求两个行索引的交集,得到目标行
target_row = intersect(steel_rows, num6_rows);
% 提取第3列元素
result = C{target_row, 3};

这里解释下为什么不用[C{:}] ==6:这个操作会把整个元胞数组的所有元素展开成一维数组,如果其他列也有数值6的话,会错误地把那些行也包含进来,直接提取第1列来判断就不会有这个问题。

用上面任意一种方法,都能自动定位到同时满足两个条件的行,然后轻松提取第3列的元素~

内容的提问来源于stack exchange,提问作者Shinobii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:22:52