擅长:python、mysql、java
<p>在第一种情况下,广播是:</p>
<pre><code> (3,) * (3,1) => (1,3) * (3,1) => (3,3)
</code></pre>
<p>这两条规则是:</p>
<pre><code>1) add leading dimensions as needed to even the number
2) adjust all size 1 dimensions to match the other
</code></pre>
<p>至于<code>dot</code>,没有广播;阅读文档了解详细信息。如果两者都是2d,则规则很简单-<code>np.dot(A,B)</code>,最后一个A与最后一个B匹配,并通过求和消除。你知道吗</p>
<p>但是1d阵列得到了特殊的处理,这是有充分证据的。你知道吗</p>
<pre><code>(2,3) and (3,) -> the 3's match and sum, leaving the (2,)
np.dot(A,B)
np.sum(A*B[None,:], axis=1)
(2,3) * (1,3) => (2,3) sum on dim 1) => (2,)
</code></pre>
<p><code>np.matmul/@</code>确实从扩展和压缩的角度描述了它对一维数组的处理。你知道吗</p>
<pre><code>np.matmul(A,b)
(2,3) @ (3,) => (2,3) @ (3,1) => (2,1) => (2,)
</code></pre>
<p><code>np.dot</code>并没有用这些术语来描述事物,尽管效果是一样的。你知道吗</p>