[英]How do I subtract every row of a matrix with every row of a second matrix in matlab?
我有兩個矩陣 A(51 行 X 5100 列)和 B(51 行 X 5100 列),我想用 B 的每一行減去 A 的每一行以獲得另一個矩陣 C(2601 行 X 5100 列)。 我怎么能有矩陣C?
你可以這樣做
51
× 1
× 5100
和1
× 51
× 5100
3D 數組;51
× 51
× 5100
的數組;51^2
× 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));
問題的關鍵在於為兩個矩陣獲取正確的行對。 為此,您可以使用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
具有不同的行數時,這也適用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.