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
)中,我手动替换所有输出以获得结果。我需要在代码的帮助下替换所有这些输出。
任何帮助将不胜感激
答案 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)