例如,給定一個矩陣randn(3,2)
- 3行,2列和一個乘法器向量randn(1,2))
2列,我想得到一個大小爲(3, 1)
的向量,其中每行代表矩陣的行元素的每個元素相乘的總和和給定的乘子像如何將給定矩陣的每一行中的所有元素與給定矢量的相應元素相乘並將它們在MATLAB中相加?
row_element_1*mul_element_1 + row_element_2*mul_element_2
例如,給定一個矩陣randn(3,2)
- 3行,2列和一個乘法器向量randn(1,2))
2列,我想得到一個大小爲(3, 1)
的向量,其中每行代表矩陣的行元素的每個元素相乘的總和和給定的乘子像如何將給定矩陣的每一行中的所有元素與給定矢量的相應元素相乘並將它們在MATLAB中相加?
row_element_1*mul_element_1 + row_element_2*mul_element_2
聽起來就像你想要一個矩陣向量的乘法。
1> x = randn(3, 2)
x =
0.62055 -1.08060
-0.24064 -2.56097
-0.53202 -0.49712
2> y = randn(1, 2)
y =
-1.26010 -0.25200
3> x * y'
ans =
-0.50964
0.94860
0.79567
注意轉座y'
。
A = randn(3, 2);
B = randn(1, 2);
C = A(:, 1) * B(1) + A(:, 2) * B(2); % size(C) = [3, 1]
如果你要擴展到有很多更多的列一個更大的陣列,不想寫出來完全對C的方程,可以使用repmat
和逐元素相乘
A = randn(300, 200);
B = randn(1, 200);
C = sum(A .* repmat(B, 300, 1), 2);
我認爲你可以bsxfun和和的組合做到這一點,就像這樣:
a = rand(3,2);
b = rand(1,2);
result = sum(bsxfun(@times,a,b),2)
result =
0.333379034494579
0.613480382112731
0.093702948350719
注意尺寸參數總和沿每一行(而不是默認的,這是d總結自己的專欄)。 BSXFUN應用標量擴展的二元函數,這對於此處的乘法部分是理想的。
這不會做所要求的。不應該有轉置,'y'應該是2x1(如問題中所述)。 –
@BenVoigt:現在看起來很順從。我在答案中沒有看到「不應該有轉置」。 –
好吧,問題確實指定了1x2向量。所以你的編輯,去掉'x'上的轉置,改變和轉換'y'的大小是正確的。 +1。 –