擅长:python、mysql、java
<p>将<code>np.linalg.norm</code>与广播结合使用(<em>numpy outer subtraction</em>),可以执行以下操作:</p>
<pre><code>np.linalg.norm(a - a[:,None], axis=-1)
</code></pre>
<p><code>a[:,None]</code>在<code>a</code>中插入一个新轴,<code>a - a[:,None]</code>然后将由于广播而进行逐行减法。<code>np.linalg.norm</code>计算最后一个轴上的<code>np.sqrt(np.sum(np.square(...)))</code>:</p>
<hr/>
<pre><code>a = np.array([[1,2,8],
[7,4,2],
[9,1,7],
[0,1,5],
[6,4,3]])
np.linalg.norm(a - a[:,None], axis=-1)
#array([[ 0. , 8.71779789, 8.1240384 , 3.31662479, 7.34846923],
# [ 8.71779789, 0. , 6.164414 , 8.18535277, 1.41421356],
# [ 8.1240384 , 6.164414 , 0. , 9.21954446, 5.83095189],
# [ 3.31662479, 8.18535277, 9.21954446, 0. , 7. ],
# [ 7.34846923, 1.41421356, 5.83095189, 7. , 0. ]])
</code></pre>
<p>例如,元素<code>[0,1]</code>,<code>[0,2]</code>对应于:</p>
<pre><code>np.sqrt(np.sum((a[0] - a[1]) ** 2))
# 8.717797887081348
np.sqrt(np.sum((a[0] - a[2]) ** 2))
# 8.1240384046359608
</code></pre>
<p>分别是。</p>