如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在MATLAB中求和?

时间:2011-11-07 03:09:17

标签: matlab matrix

例如,给定矩阵randn(3,2) - 3行,2列和乘数randn(1,2)) 2列的向量,我想得到一个大小为(3, 1)的向量,其中每行将表示矩阵行元素和给定乘数(如

)的每元素乘法的总和
row_element_1*mul_element_1 + row_element_2*mul_element_2

3 个答案:

答案 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);