Matlab for循环中指定变量计算值保存及多变量逐行对比实现求助
解决方案
步骤1:存储指定变量的中间计算结果
不要单独创建calcu_A、calcu_B这类独立变量,用映射表(MATLAB)/字典(Python)统一存储选中变量的计算结果,实现逻辑如下(以你代码的MATLAB语法为例):
% 定义你需要保存的11个指定变量 chosen_variable = {'A','B','C','D','E','F','G','H','I','J','K'}; % 创建映射表存储每个选中变量的计算结果 calcu_results = containers.Map('KeyType','char','ValueType','any'); % 补全你16个变量的名称列表,顺序和循环的i=1到16一一对应 all_variables = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'}; for i = 1:16 % 替换为你实际的计算逻辑 calcu = aa + cc; current_var = all_variables{i}; % 仅保存选中的变量结果 if ismember(current_var, chosen_variable) calcu_results(current_var) = calcu; end end
步骤2:批量对比生成New_Calcu
不需要写10次重复的逐行循环,直接用内置的向量化取最大值函数一次搞定,逻辑如下:
% 取A的计算结果作为初始值 calcu_A = calcu_results('A'); New_Calcu = calcu_A; % 筛选出除A外的其他10个选中变量 other_chosen_vars = chosen_variable(~strcmp(chosen_variable, 'A')); % 遍历每个其他选中变量,逐行取最大值更新结果 for idx = 1:length(other_chosen_vars) current_calcu = calcu_results(other_chosen_vars{idx}); % 直接向量化对比,等效于逐行取较大值,无需写n循环 New_Calcu = max(New_Calcu, current_calcu); end
适配Python场景的代码(如果你用Python开发)
import numpy as np # 定义选中变量 chosen_variable = ['A','B','C','D','E','F','G','H','I','J','K'] calcu_results = {} # 16个变量的全量名称列表 all_variables = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'] for i in range(16): # 替换为实际计算逻辑 calcu = aa + cc current_var = all_variables[i] if current_var in chosen_variable: calcu_results[current_var] = calcu # 生成New_Calcu calcu_A = calcu_results['A'] New_Calcu = calcu_A.copy() other_chosen_vars = [v for v in chosen_variable if v != 'A'] for var in other_chosen_vars: current_calcu = calcu_results[var] New_Calcu = np.maximum(New_Calcu, current_calcu)
注意事项
- 所有选中变量的计算结果行数、列数需要保持一致,否则对比会报错
- 向量化的max操作比手动逐行写循环效率高很多,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者Newbie25
相关产品推荐
相关产品推荐

