擅长:python、mysql、java
<p>因为我不明白的原因</p>
<pre><code>(2 * np.inner(a-0.5, 0.5-a) + a.shape[1] / 2)
</code></pre>
<p>对于更大的阵列,似乎比@Psidom快得多:</p>
^{pr2}$
<p>对于一个非常小的例子,Psidom的速度要快一些:</p>
<pre><code>a
# array([[1, 0, 0, 1, 1, 0],
# [1, 0, 0, 0, 0, 0],
# [1, 1, 1, 1, 0, 0]])
timeit(lambda: (a[:, None, :] != a).sum(2), number=100)
# 0.0004370050155557692
timeit(lambda: (2 * np.inner(a-0.5, 0.5-a) + a.shape[1] / 2), number=100)
# 0.00068191799800843
</code></pre>
<p><strong>更新</strong></p>
<p>部分原因似乎是浮动比其他数据类型快:</p>
<pre><code>timeit(lambda: (0.5 * np.inner(2*a-1, 1-2*a) + a.shape[1] / 2), number=100)
# 0.7315902590053156
timeit(lambda: (0.5 * np.inner(2.0*a-1, 1-2.0*a) + a.shape[1] / 2), number=100)
# 0.12021801102673635
</code></pre>