【问题标题】:How do I subtract every row of a matrix with every row of a second matrix in matlab?如何在matlab中用第二个矩阵的每一行减去矩阵的每一行?
【发布时间】:2021-11-03 19:22:01
【问题描述】:

我有两个矩阵 A(51 行 X 5100 列)和 B(51 行 X 5100 列),我想用 B 的每一行减去 A 的每一行以获得另一个矩阵 C(2601 行 X 5100 列)。我怎样才能得到矩阵 C?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    你可以这样做

    1. permuting 矩阵的维数分别获得大小为 51 × 1 × 51001 × 51 × 5100 的 3D 数组;
    2. implicit expansion减去,得到一个大小为51 × 51 × 5100的数组;
    3. reshaping 将前两个维度合并为一个,得到最终的51*51 × 5100 矩阵。
    A = rand(51, 5100); % example matrix
    B = rand(51, 5100); % example matrix, same number of columns
    C = reshape(permute(A, [1 3 2]) - permute(B, [3 1 2]), [], size(A, 2));
    

    【讨论】:

    • 感谢完美
    【解决方案2】:

    问题的关键在于为两个矩阵获取正确的行对。为此,您可以使用meshgrid() 函数生成一个矩阵,该矩阵沿其行从1:n 变化,并沿其列变化(其中n 是行数)。

    例如:

    mtx1 = reshape(1:9, 3, 3);
    mtx2 = reshape(101:109, 3, 3);
    n1 = size(mtx1, 1);
    n2 = size(mtx2, 1);
    
    [r1, r2] = meshgrid(1:n1, 1:n2);
    

    这给出了:

    r1 =
    
       1   2   3
       1   2   3
       1   2   3
    
    r2 =
    
       1   1   1
       2   2   2
       3   3   3
    

    接下来,将r1r2 都展平:

    f1 = r1(:)
    f2 = r2(:)
    

    现在,我们有:

    f1 =
    
       1
       1
       1
       2
       2
       2
       3
       3
       3
    
    f2 =
    
       1
       2
       3
       1
       2
       3
       1
       2
       3
    

    我们可以使用f1f2 作为行对的索引:

    mtx1(f1, :)mtx1 的第一行重复三次,然后是第二行,然后是第三行

    mtx1(f1, :)
    
       1   4   7
       1   4   7
       1   4   7
       2   5   8
       2   5   8
       2   5   8
       3   6   9
       3   6   9
       3   6   9
    
    

    mtx2(f2, :) 将整个矩阵 mtx2 重复三次

    mtx2(f2, :)
    
    
       101   104   107
       102   105   108
       103   106   109
       101   104   107
       102   105   108
       103   106   109
       101   104   107
       102   105   108
       103   106   109
    

    减去这两个,你得到你的两两行差异:

    mtx2(f2, :) - mtx1(f1, :)
    
       100   100   100
       101   101   101
       102   102   102
        99    99    99
       100   100   100
       101   101   101
        98    98    98
        99    99    99
       100   100   100
    
    

    这也适用于 mtx1mtx2 具有不同的行数。

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2012-11-04
      • 1970-01-01
      • 2013-03-17
      • 2014-12-07
      • 1970-01-01
      • 2015-05-15
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多