如何从循环中的工作区调用具有不同索引号的.mat 文件?

How to call .mat files with different index number from workspace in loop?

我在工作区中有 30 多个 2D mat 文件名称为 A1, A2, A3,.... A30。为了创建 3D mat 文件,如何在循环中调用 A1, A2,...

for i=1:30  
    A(:,:,i)=A{i}     
end

我想让 A{i} 在后续循环中随着 A1,A2,A3,.. 变化。

可以用邪eval, in combination with sprintf。这样你就可以避免使用循环:

A1 = 1:3;A2 = 4:6; A3 = 10:12;
A = eval(['[',sprintf('A%i;',1:3),']'])
A =    
     1     2     3
     4     5     6
    10    11    12

sprintf 部分创建一个字符串 A1;A2;A3;,像这样:

sprintf('A%i;',1:3)
ans =    
A1;A2;A3;

然后,把它括起来(它仍然是一个字符串):

['[',sprintf('A%i;',1:3),']']
ans =
[A1;A2;A3;]

最后,计算字符串:

eval(['[',sprintf('A%i;',1:3),']'])

要使用 3D:

A1 = magic(3);A2=2*magic(3);A3=3*magic(3);
A = permute(reshape(eval(['[',sprintf('A%i;',1:3),']'])',3,3,[]),[2 1 3])
% or:
A = permute(reshape(eval(['[',sprintf('A%i;',1:3),']']),3,3,[]),[1 3 2])    
A(:,:,1) =    
     8     1     6
     3     5     7
     4     9     2        
A(:,:,2) =    
    16     2    12
     6    10    14
     8    18     4    
A(:,:,3) =    
    24     3    18
     9    15    21
    12    27     6

直到 eval 部分,它是相同的。现在,您需要重塑转置矩阵,使其成为 3D 矩阵。此后,您需要对其进行排列,以切换第一维和第二维。


请注意,您应该尽量避免这种情况。可读性很差,性能更差,健壮性最差。如果可能的话,你绝对应该尽量避免使用 A1, A2, A3 ... 这样的名字。