2011-11-07 86 views

回答

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'

+0

这不会做所要求的。不应该有转置,'y'应该是2x1(如问题中所述)。 –

+0

@BenVoigt:现在看起来很顺从。我在答案中没有看到“不应该有转置”。 –

+0

好吧,问题确实指定了1x2向量。所以你的编辑,去掉'x'上的转置,改变和转换'y'的大小是正确的。 +1。 –

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); 
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应用标量扩展的二元函数,这对于此处的乘法部分是理想的。

相关问题