在MATLAB中迭代创建矩阵名称并执行操作

时间:2013-10-26 14:04:07

标签: matlab matrix

我有一个三维矩阵K(i,j,l)。我想从K创建一个新的矩阵,它将是i的每个值的切片。我还必须转换新形成的二维矩阵。

for l=1:40  
    for j=1:15
       K1(l,j)=K(1,j,l);
       K2(l,j)=K(2,j,l);
.
.
.
       K35(l,j)=K(35,j,l);
    end;
end;

我想创建另一个循环,在循环中创建新矩阵的名称。

即;

K1(l,j)=K(1,j,l) (when i=1)
K2(l,j)=K(2,j,l) when i=2...

我遇到的问题是我似乎无法在循环中迭代地命名矩阵(K1,K2 ... K35),同时执行尺寸变换操作。我尝试了num2strsprintf,但由于某种原因,它们似乎无法运作。如果您有任何想法,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:1)

我不明白为什么要为矩阵指定不同的名称。你不能把它们存储在这样的单元格中:

K = cell(35, 1);
for ii=1:35
  K{ii} = squeeze(K_DEA(ii, :, :))';
end

否则,如果您确实需要使用不同的名称,请执行以下操作:

K = cell(35, 1);
for ii=1:35
  eval(sprintf('K%d = squeeze(K_DEA(ii, :, :))'';', ii));
end

答案 1 :(得分:-1)

如果我理解你的问题,以下应解决你的问题:

K1=squeeze(K(1,:,:))';
K2=squeeze(K(2,:,:))';
.
.
.
K35=squeeze(K(35,:,:))';

用于循环i=1:35

for i=1:35
  name = sprintf("K%d",i);
  A = squeeze(K(i,:,:))';
  eval([name ' = A']);
end

或者更简洁,

for i=1:35
  eval([sprintf("K%d = squeeze(K(i,:,:))'",i)]);
end
相关问题