擅长:python、mysql、java
<p>我已经计算出我可以用双迭代器得到我想要的答案,尽管我不确定它对于非常大的数组是最有效的</p>
<pre><code>np.array([j-i for i in z for j in z]).reshape(len(z),len(z))
</code></pre>
<p>输出:</p>
<pre><code>array([[ 0, 4, 7],
[-4, 0, 3],
[-7, -3, 0]])
</code></pre>
<p>编辑:实际上,其他两种解决方案的速度要快50倍:</p>
<pre><code>python3 -m timeit -s "import numpy as np" -s "z=np.random.uniform(size=5000)" "z-z.reshape(-1,1)"
2 loops, best of 5: 119 msec per loop
python3 -m timeit -s "import numpy as np" -s "z=np.random.uniform(size=5000)" "np.subtract.outer(z, z)"
2 loops, best of 5: 118 msec per loop
python3 -m timeit -s "import numpy as np" -s "z=np.random.uniform(size=5000)" "np.array([j-i for i in z for j in z]).reshape(len(z),len(z))"
1 loop, best of 5: 5.18 sec per loop
</code></pre>