【问题标题】:MATLAB concatenate 2D matrix tilesMATLAB 连接二维矩阵图块
【发布时间】:2013-06-02 18:36:05
【问题描述】:

我有 n2 个大小相同 (8x8) 的矩阵,我想将它们平铺成一个矩阵,如下图所示:

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

【问题讨论】:

  • n^2 矩阵是如何存储的?作为具有某种命名方案的单独变量?在单元阵列中?在 N 维数组(3 维数组)中?
  • 目前我正在一个 for 循环中形成它们,在该循环中我还试图将它们附加到大矩阵中,这样它们就不会被显式存储。
  • 只需 A=[A1,A2;A3,A4] 就可以了...(使用 A1-A4 您的子矩阵)
  • 子矩阵的个数不限4个,任意平方数。
  • 哦,对不起,我没有仔细阅读。 “在 for 循环中形成它们”是什么意思?你到底是做什么的?

标签: matlab matrix concatenation


【解决方案1】:

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

在以下示例中,假设 C 是您的 n2×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)), []))

【讨论】:

    【解决方案2】:

    如果您已经有一个 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 的分配以及通过交换索引来插入数据的方式。

    【讨论】:

      【解决方案3】:

      是的!

      %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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 2015-12-20
        相关资源
        最近更新 更多