<p>尝试此方法,沿<code>axis = 1</code>创建一个新轴,然后使用<code>sum</code>进行广播和计数真值或非零:</p>
<pre><code>(arr[:, None, :] != arr).sum(2)
# array([[0, 2, 3],
# [2, 0, 3],
# [3, 3, 0]])
</code></pre>
<hr/>
^{pr2}$
<p>解释:</p>
<p>1)创建具有形状(3,1,6)的三维阵列</p>
<pre><code>arr[:, None, :]
#array([[[1, 0, 0, 1, 1, 0]],
# [[1, 0, 0, 0, 0, 0]],
# [[1, 1, 1, 1, 0, 0]]])
</code></pre>
<p>2)这是一个二维数组,有形状(3,6)</p>
<pre><code>arr
#array([[1, 0, 0, 1, 1, 0],
# [1, 0, 0, 0, 0, 0],
# [1, 1, 1, 1, 0, 0]])
</code></pre>
<p>3)这会触发广播,因为它们的形状不匹配,并且2d数组<em>arr</em>首先沿着3d array<em>arr[:,None,:]</em>的0轴广播,然后对(3,6)的shape(1,6)数组进行广播。两个广播步骤一起对原始阵列进行笛卡尔比较。</p>
<pre><code>arr[:, None, :] != arr
#array([[[False, False, False, False, False, False],
# [False, False, False, True, True, False],
# [False, True, True, False, True, False]],
# [[False, False, False, True, True, False],
# [False, False, False, False, False, False],
# [False, True, True, True, False, False]],
# [[False, True, True, False, True, False],
# [False, True, True, True, False, False],
# [False, False, False, False, False, False]]], dtype=bool)
</code></pre>
<p>4)沿着第三个轴的<code>sum</code>计算有多少个元素不相等,即trues给出了hamming距离。</p>