使用。*操作将行和列向量相乘

时间:2015-06-18 08:22:00

标签: matrix octave matrix-multiplication

a =

1
2
3

b =

1   2   3

a.*b
ans =

1   2   3
2   4   6
3   6   9

我使用。*运算符在Octave中乘以行向量和列向量来查看结果。我不明白答案是如何获得的。

1 个答案:

答案 0 :(得分:2)

这是因为Octave(与Matlab有显着差异)automatically broadcasts

Octave中的*运算符是matrix multiplication运算符。所以在你的情况下a*b会输出(在Matlab中也是如此)

a*b
ans =

1   2   3
2   4   6
3   6   9

应该是预期的。 3 -by- 1 矩阵与 1 -by- 3 矩阵的乘积将具有维数< em> 3 -by- 3 (内部尺寸必须匹配,结果采用外部尺寸)。

.*运算符是元素乘法运算。这意味着,不是矩阵乘法,而是将两个输入的每个对应元素与矩阵的其余部分相乘。因此[1,2,3].*[1,2,3](或a'.*b)会产生[1,4,9]。再次,这是在Matlab和Octave。

使用逐元素操作时,输入的尺寸必须完全匹配。因此,[1,2,3].*[1,2]会因为尺寸不匹配而导致错误。在Matlab中,您的a.*b也会出错。但是在Octave它不会,而是会自动播放。您可以想象这就好像它需要您的一个输入并在单个维度上复制它(因此在列向量中,第二个维度是单个维度,因为它的大小为1)然后以元素方式应用运算符。在你的情况下,你有两个单独维度的矩阵(即columan向量和行向量),所以它实际上广播了两次你有效(但请注意,它实际上并没有扩展内存中的矩阵,并且通常比使用{{ 1}})获取

repmat

产生你看到的结果。

在matlab中,为了获得相同的结果,您必须显式调用[1,2,3;1,2,3;1,2,3].*[1,1,1;2,2,2;3,3,3] 函数(二进制单例扩展函数),如下所示:

bsxfun