<p>对你来说</p>
<ol>
<li><p><code>A</code>是二维数组,即矩阵,其<em>形状</em>为(2,3)。来自<code>numpy.matrix</code>的docstring:</p>
<blockquote>
<p>A matrix is a specialized 2-D array that retains its 2-D nature through operations.</p>
</blockquote></li>
<li><p><code>numpy.rank</code>返回数组的<em>维数</em>的数目,这与<a href="http://en.wikipedia.org/wiki/Rank_%28linear_algebra%29" rel="nofollow">rank in linear algebra</a>的概念有很大不同,例如<code>A</code>是维数/秩2的数组。</p></li>
<li><code>np.dot(V, M)</code>,或<code>V.dot(M)</code>将矩阵<code>V</code>与<code>M</code>相乘。注意numpy.dot尽可能地进行乘法运算。<strong>如果V为N:1,M为N:N</strong>,则<code>V.dot(M)</code>将引发<code>ValueError</code>。</li>
</ol>
<p>例如:</p>
<pre><code>In [125]: a
Out[125]:
array([[1],
[2]])
In [126]: b
Out[126]:
array([[2, 3],
[1, 2]])
In [127]: a.dot(b)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-127-9a1f5761fa9d> in <module>()
----> 1 a.dot(b)
ValueError: objects are not aligned
</code></pre>
<h2>编辑:</h2>
<p><strong>我不理解(N,)和(N,1)的形状之间的区别,它与dot()文档有关。</strong></p>
<p>形状(N,)的<code>V</code>表示长度为N的1D数组,而形状(N,1)表示具有N行1列的2D数组:</p>
<pre><code>In [2]: V = np.arange(2)
In [3]: V.shape
Out[3]: (2,)
In [4]: Q = V[:, np.newaxis]
In [5]: Q.shape
Out[5]: (2, 1)
In [6]: Q
Out[6]:
array([[0],
[1]])
</code></pre>
<p>正如<code>np.dot</code>的docstring所说:</p>
<blockquote>
<p>For 2-D arrays it is equivalent to matrix multiplication, and for 1-D
arrays to inner product of vectors (without complex conjugation).</p>
</blockquote>
<p>如果其中一个参数是向量,它还执行向量矩阵乘法。说<code>V.shape==(2,); M.shape==(2,2)</code>:</p>
<pre><code>In [17]: V
Out[17]: array([0, 1])
In [18]: M
Out[18]:
array([[2, 3],
[4, 5]])
In [19]: np.dot(V, M) #treats V as a 1*N 2D array
Out[19]: array([4, 5]) #note the result is a 1D array of shape (2,), not (1, 2)
In [20]: np.dot(M, V) #treats V as a N*1 2D array
Out[20]: array([3, 5]) #result is still a 1D array of shape (2,), not (2, 1)
In [21]: Q #a 2D array of shape (2, 1)
Out[21]:
array([[0],
[1]])
In [22]: np.dot(M, Q) #matrix multiplication
Out[22]:
array([[3], #gets a result of shape (2, 1)
[5]])
</code></pre>