擅长:python、mysql、java
<p>答案几乎总是<a href="http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html" rel="nofollow">broadcasting</a>:</p>
<pre><code>>>> r = np.arange(6).reshape(2, 3)
>>> r[:, None] - r
array([[[ 0, 0, 0],
[-3, -3, -3]],
[[ 3, 3, 3],
[ 0, 0, 0]]])
</code></pre>
<p>索引中的<code>None</code>与<code>np.newaxis</code>相同,并将大小为1的维度添加到数组的形状中。所以你要从一个形状为<code>(2, 1, 3)</code>的数组中减去一个形状为<code>(2, 3)</code>的数组,它通过广播转换成<code>(1, 2, 3)</code>,最终结果就是你想要的<code>(2, 2, 3)</code>数组。虽然广播在概念上类似于使用<code>np.tile</code>或<code>np.repeat</code>,但它更有效,因为它避免创建原始数组的扩展副本。在</p>