我有兩個矩陣 A(51 行 X 5100 列)和 B(51 行 X 5100 列),我想用 B 的每一行減去 A 的每一行以獲得另一個矩陣 C(2601 行 X 5100 列)。我怎么能有矩陣C?
uj5u.com熱心網友回復:
你可以這樣做
- 置換矩陣的尺寸,以獲得尺寸的三維陣列(在你的例子)
51×1×5100和1×51×5100分別; - 用隱式擴展減去,得到一個大小為
51×51×的陣列5100; - 重塑以將前兩個維度折疊為一個,從而得到最終的
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));
uj5u.com熱心網友回復:
問題的關鍵在于為兩個矩陣獲取正確的行對。為此,您可以使用該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
接下來,將r1和都展平r2:
f1 = r1(:)
f2 = r2(:)
現在,我們有:
f1 =
1
1
1
2
2
2
3
3
3
f2 =
1
2
3
1
2
3
1
2
3
我們可以使用f1和f2作為我們的行對的索引:
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
當這也適用mtx1和mtx2有不同的行數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352777.html
