例如,给定矩阵randn(3,2)
- 3行,2列和乘数randn(1,2))
2列的向量,我想得到一个大小为(3, 1)
的向量,其中每行将表示矩阵行元素和给定乘数(如
row_element_1*mul_element_1 + row_element_2*mul_element_2
答案 0 :(得分:5)
听起来你想要一个矩阵向量乘法。
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'
。
答案 1 :(得分:2)
我认为你可以用bsxfun和sum的组合来做到这一点,如下所示:
a = rand(3,2);
b = rand(1,2);
result = sum(bsxfun(@times,a,b),2)
result =
0.333379034494579
0.613480382112731
0.093702948350719
注意SUM的维度参数以沿每一行求和(而不是默认值,即向下列)。 BSXFUN应用带标量扩展的二元函数,这对于此处的乘法部分是理想的。
答案 2 :(得分:0)
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);