擅长:python、mysql、java
<p><code>dot</code>是矩阵乘法,但是<code>*</code>做了其他事情。</p>
<p>我们有两个阵列:</p>
<ul>
<li><code>X</code>,形状(97,2)</li>
<li><code>y</code>,形状(2,1)</li>
</ul>
<p>对于Numpy数组,操作</p>
<pre><code>X * y
</code></pre>
<p>是按元素执行的,但可以在一个或多个维度中展开其中一个或两个值,以使它们兼容。这个操作叫做广播。尺寸为1或丢失的尺寸可用于广播。</p>
<p>在上面的示例中,维度不兼容,因为:</p>
<pre><code>97 2
2 1
</code></pre>
<p>在第一维度(97和2)中有冲突的数字。这就是上面的ValueError所抱怨的。第二个维度可以,因为数字1与任何内容都不冲突。</p>
<p>有关广播规则的详细信息:<a href="http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html" rel="noreferrer">http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html</a></p>
<p>(请注意,如果<code>X</code>和<code>y</code>是<code>numpy.matrix</code>类型,则星号可用作矩阵乘法。我的建议是远离<code>numpy.matrix</code>,它往往会使事情复杂化,而不是简单化。)</p>
<p>数组应该可以使用<code>numpy.dot</code>;如果在<code>numpy.dot</code>上得到错误,则必须有其他错误。如果形状不适合<code>numpy.dot</code>,则会出现不同的异常:</p>
<pre><code>ValueError: matrices are not aligned
</code></pre>
<p>如果你仍然得到这个错误,请张贴一个最小的问题的例子。一个使用类似于您的数组的乘法示例成功:</p>
<pre><code>In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
</code></pre>