怎样用matlab实现:一个列向量与矩阵的每一列做点乘?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用matlab实现:一个列向量与矩阵的每一列做点乘?相关的知识,希望对你有一定的参考价值。
比如,列向量a=[1;4;5]与矩阵
1 3 6 3 1 3 6 3
m= 3 5 7 7 相乘得 12 20 28 28
4 7 3 9 20 35 15 45
用循环当然可以实现,如果不用循环用哪个命令能实现呢?
先谢了
上面的编排乱了,再写一遍。
一个向量与一个矩阵的每一列对应的数相乘得新矩阵的相应的列。
比如,列向量a=[1;4;5]与矩阵m=[1 3 6 3;3 5 7 7;4 7 3 9]相乘得
矩阵[1 3 6 3;12 20 28 28;20 35 15 45]。
怎样用matlab命令简单实现呢?不用循环。
如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?
【中文标题】如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 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实现:一个列向量与矩阵的每一列做点乘?的主要内容,如果未能解决你的问题,请参考以下文章