MATLAB连接2D矩阵切片

时间:2013-06-02 02:10:53

标签: matlab matrix concatenation

我有n 2 大小相等(8x8)的矩阵,我想将它平铺成单个矩阵,如下图所示: diagram

我知道我可以逐列连接它们然后连接每一行,但我想知道是否有更简单的方法来实现这一点。

3 个答案:

答案 0 :(得分:2)

有一种更简单的方法,您可以将所有矩阵存储在单元格数组中,然后重新整形并转换回矩阵:

在以下示例中,假设C是您的n 2 ×1单元矩阵数组:

cell2mat(reshape(C, sqrt(numel(C)), []));

根据需要,结果是单个平铺矩阵A

实施例

a = ones(2); b = 2 * a; c = 3 * a; d = 4 * a;
C = {a, b, c, d};
A = cell2mat(reshape(C, sqrt(numel(C)), []))

结果是:

A =
     1     1     3     3
     1     1     3     3
     2     2     4     4
     2     2     4     4

注意子矩阵的顺序:它们按列排列。如果您希望A

A =
     1     1     2     2
     1     1     2     2
     3     3     4     4
     3     3     4     4

然后你必须通过C的转置版本来重塑:

cell2mat(reshape(C', sqrt(numel(C)), []))

答案 1 :(得分:0)

是的!

%Assuming your matrices are A1, A2, A3 and A4:
A = zeros(size(A1)*2);
A(1:8,1:8) = A1;
A(9:16, 1:8) = A2;
A(1:8, 9:16) = A3;
A(9:16, 9:16) = A4;

答案 2 :(得分:0)

如果你已经有一个for循环来创建8×8矩阵,你可以这样做:

M = 8; % Rows of each block matrix
N = 8; % Columns of each square block matrix
m = 2; % Number of blocks across
n = 2; % Number of blocks vertically
A(m*n*M,N) = 0; % Preallocate an m*n*M-by-N column of blocks
for i = 1:m*n
    a = rand(M,N);          % Create your data, just random here
    A(1+M*(i-1):M*i,:) = a; % Insert data
end
A = reshape(A,[M*m N*n]); % Reshape to obtain block matrix

这假设您有一个for循环遍历所有n^2(或m*n)个案例。此外,它一次构建A一列块。注意:如果您需要首先使用跨越行的块来构建它,那么您将需要通过交换索引来更改A的分配以及如何插入数据。