<p>首先,我们可以问哪些是有效的!</p>
<pre><code>In [4]: vector1 = np.arange(10)
In [5]: matrix1 = np.arange(50).reshape(5,10)
</code></pre>
<p>首先使用<code>dot</code>的错误方法:</p>
<pre><code>In [6]: np.dot(vector1*matrix1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-c0ee48ce8d26> in <module>()
----> 1 np.dot(vector1*matrix1)
TypeError: Required argument 'b' (pos 2) not found
</code></pre>
<p>下一个有用的</p>
<pre><code>In [7]: np.array([np.dot(row,vector1) for row in matrix1])
Out[7]: array([ 285, 735, 1185, 1635, 2085])
</code></pre>
<p>另一个错误的方法是-使用<code>matmul</code>的基本规则和使用<code>dot</code>的基本规则是“a的最后一个,b的第二个到最后一个”:</p>
<pre><code>In [8]: np.matmul(vector1,matrix1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-90d753017fdf> in <module>()
----> 1 np.matmul(vector1,matrix1)
ValueError: shapes (10,) and (5,10) not aligned: 10 (dim 0) != 5 (dim 0)
</code></pre>
<p>正确使用<code>dot</code>(A(5,10)对和A(10,)ok的方法:</p>
<pre><code>In [9]: np.dot(matrix1,vector1)
Out[9]: array([ 285, 735, 1185, 1635, 2085])
</code></pre>
<p>还有另一个正确的方法。</p>
<pre><code>In [10]: np.sum(matrix1*vector1,axis=1)
Out[10]: array([ 285, 735, 1185, 1635, 2085])
</code></pre>
<p>工作的结果是一样的。</p>
<p>[9]中的顺序也适用于<code>matmul</code>。它也可以写成<code>matrix1 @ vector1</code>。</p>
<p>至于“最佳”,我们可以试试时机。我猜9是最快的,7是最慢的。</p>
<p>其中(5,10)对与(10,)的情形是(5,10)对与(10,n)产生(5,n)的典型2d情形的推广。</p>