Matlab:重复并将行和列连接成新数组

Nic*_*ick 3 arrays matlab for-loop concatenation repeat

我有两个4乘4阵列:

a1 = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16 ]
a2 = [ 17 18 19 20; 21 22 23 24; 25 26 27 28; 29 30 31 32 ]
Run Code Online (Sandbox Code Playgroud)

我需要创建16×8阵列C:

1   2   3   4   17  18  19  20
1   2   3   4   21  22  23  24
1   2   3   4   25  26  27  28
1   2   3   4   29  30  31  32
5   6   7   8   17  18  19  20
5   6   7   8   21  22  23  24
5   6   7   8   25  26  27  28
5   6   7   8   29  30  31  32
9   10  11  12  17  18  19  20
9   10  11  12  21  22  23  24
9   10  11  12  25  26  27  28
9   10  11  12  29  30  31  32
13  14  15  16  17  18  19  20
13  14  15  16  21  22  23  24
13  14  15  16  25  26  27  28
13  14  15  16  29  30  31  32
Run Code Online (Sandbox Code Playgroud)

结果数组的左半部分(从第1列到第4列)C应该重复4次数组的第i行a1,右半部分(从第5列到第8列)应该重复4次数组a2.

以下是我的代码.

p=4
n=4

for i=1:n
    b=n*i;
    a=n*(i-1)+1;
for j=1:p
    for k=a:b
        C(k,j)=a1(i,j);
    end;
end;
end;

for i=1:n
    b=n*i;
    a=n*(i-1)+1;
for j=p+1:2*p
    l=1;
    for k=a:b
        C(k,j)=a2(l,j-p);
        l=l+1;
    end;
end;
end;
C;
size_C=size(C)
Run Code Online (Sandbox Code Playgroud)

题.是否可以在C没有for-loop的情况下创建结果数组?我可以使用哪些功能?

NLi*_*ros 5

是的,这是可能的.一种方法是使用kron和repmat

C = [kron(a1,ones(4,1))repmat(a2,4,1)]

也许4应该来自其中一个矩阵的大小