在MATLAB中使用部分变量名创建一个循环

时间:2014-09-01 08:40:24

标签: matlab loops

我是Matlab的初学者,到目前为止还没能找到我的问题的答案。非常感谢您的帮助。

我有70个矩阵(100x100),名为SUBJ_1,SUBJ_2等。我想创建一个循环,以便为每个矩阵计算一些度量(即最大值和最小值),并将输出保存为70x2结果矩阵(其中每一行对应于连续命名的SUBJ_矩阵)。

我正在努力解决这两个阶段 - 如何在'for'循环中使用各个变量的名称以及如何在组合数组中正确保存单个输出。

非常感谢,一切顺利!

3 个答案:

答案 0 :(得分:4)

不要使用此类变量名称,创建名为SUBJ的大单元格数组并将每个Matrix放入其中。

r=zeros(numel(SUBJ),2)
for idx=1:numel(SUBJ)
   r(idx,1)=min(min(SUBJ{idx}))
   r(idx,2)=max(max(SUBJ{idx}))
end

minmax被调用两次,因为第一次调用在行之间创建最大值,在列之间进行第二次调用。

答案 1 :(得分:3)

尽管这在Matlab中原则上是可行的,但我不推荐它:实现起来太慢而且麻烦。

您可以改为在一个矩阵中使用包含所有SUBJ等的3-D矩阵(100x100x70)SUBJ_1。这将允许您只用一行代码计算最小/最大等。 Matlab将在内部处理循环:

OUTPUT(:,1) = min(min(SUBJ,[],1)[],2);
OUTPUT(:,2) = max(max(SUBJ,[],1)[],2);

像这样,OUTPUT(1,1)包含min(min(SUBJ(:,:,1)))等等......

答案 2 :(得分:1)

关于如何在'for'循环中使用各个变量的名称,这里给出一个例子:

SUBJ = [];
for idx = 1:70
    term = eval(['SUBJ_',num2str(idx)]);
    SUBJ = [SUBJ; max(max(term)),min(min(term))];
end