如何在matlab中重组4096 matrice

时间:2018-03-07 05:23:46

标签: matlab matrix

W = [0:255];
A = reshape(W,[16,16])'
[a b] = size(A);
c=4;
d=4;
l=0;
for i=1:c:a-3
  for j=1:d:b-3
    C=A((i:i+3),(j:j+3));
    eval(['out_' num2str(l) '=C'])
    l=l+1;
  end
end

combineagain = [out_0 out_1 out_2 out_3; out_4 out_5 out_6 out_7; out_8 out_9 out_10 out_11; out_12 out_13 out_14 out_15]

这是一个代码,借助它我分裂然后重新组合矩阵。在最后一个赋值(combineagain)中,我手动替换所有输出以获得结果。我需要在代码的帮助下替换所有这些输出。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

使用eval以编程方式生成变量名称是个坏主意。你已经找到了其中一个原因。

您可以遵循的一种方法是使用单元格数组来捕获循环中的所有组件:

W = [0:255];
A = reshape(W,[16,16])';
[a b] = size(A);
c=4;
d=4;
l=0;
C = {};
for j=1:d:b-3
  for i=1:c:a-3
    l=l+1;
    C{l}=A((i:i+3),(j:j+3));
  end
end
C = reshape(C,[c,d]);
combineagain = cell2mat(C)

我切换了两个循环的顺序,以便C单元格数组的顺序正确。通常,最好让内循环超过第一个索引。

如果您不想更改循环顺序,也可以直接索引到C以将组件放入正确的位置。为此我改变了索引:

W = [0:255];
A = reshape(W,[16,16])'
[a b] = size(A);
c=4;
d=4;
a = a/c;
b = b/d;
C = cell(a,b);
for i=1:a
  for j=1:b
    C{i,j}=A((i-1)*c+(1:c),(j-1)*d+(1:d));
  end
end
combineagain = cell2mat(C)