例如,给定一个矩阵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。 –