如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?
Posted
技术标签:
【中文标题】如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?【英文标题】:How do I multiply all the elements in each row of a given matrix with corresponding elements of a given vector and sum them in MATLAB? 【发布时间】:2011-11-07 03:09:16 【问题描述】:例如,给定一个矩阵 randn(3,2)
- 3 行 2 列和一个乘数向量 randn(1,2))
2 列,我想得到一个大小为 (3, 1)
的向量,其中每一行代表每行的总和矩阵行元素的元素乘法和给定的乘数,如
row_element_1*mul_element_1 + row_element_2*mul_element_2
【问题讨论】:
【参考方案1】:听起来你想要矩阵向量乘法。
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'
。
【讨论】:
这不符合要求。不应该有转置,y
应该是 2x1(如问题所述)。
@BenVoigt:现在似乎符合要求。我没有在答案中看到“不应该有转置”。
嗯,好的,问题确实指定了一个 1x2 向量。因此,您的编辑,删除x
上的转置并更改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 应用了一个带有标量扩展的二进制函数,非常适合这里的乘法部分。
【讨论】:
【参考方案3】: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);
【讨论】:
以上是关于如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?的主要内容,如果未能解决你的问题,请参考以下文章
是否有将dask.array的每一行(或列)乘以向量元素的有效方法?