MATLAB Cell数组不同列数值替换为对应字符串的索引问题
Matlab Cell数组指定列匹配替换的实现方法
问题原因
你之前的写法出错是因为Matlab中对二维数组直接使用一维逻辑索引时,会按照列优先的线性存储顺序匹配元素,你只传入了行维度的判断条件,没有指定对应的目标列,所以替换位置全部落到了第一列的对应行。
正确实现方案
单条规则直接写法
针对你当前两列替换的需求,只需要在索引时明确指定目标列即可:
- 第一列值为1的位置替换为
'Cat':B(A(:,1) == 1, 1) = {'Cat'}; - 第二列值为1的位置替换为
'Dog':B(A(:,2) == 1, 2) = {'Dog'};
多规则批量写法
如果后续需要新增更多列的替换规则,可以用循环批量处理,降低代码重复率:
% 预设替换规则,格式为{目标列号, 匹配数值, 替换字符串} rules = { 1, 1, 'Cat' 2, 1, 'Dog' % 可继续按格式新增其他规则 }; % 遍历规则执行替换 for i = 1:size(rules, 1) target_col = rules{i, 1}; match_val = rules{i, 2}; replace_content = rules{i, 3}; B(A(:, target_col) == match_val, target_col) = {replace_content}; end
测试验证
用你给出的示例矩阵测试:
A = [ 1 2 1 3 5; 2 1 5 1 4; 1 1 2 5 1; 5 5 3 4 1; 1 1 2 5 2]; B = num2cell(A); % 执行上述替换代码后即可得到预期结果
最终得到的B矩阵和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者K_Sol
相关产品推荐
相关产品推荐

