擅长:python、mysql、java
<p>使用二维数组索引可以更容易地可视化此代码:</p>
<pre><code>for j in range(length_A):
for i in range(length_B):
dist = (A[j,0] - B[i,0])**2 + (A[j,1] - B[i,1])**2
if dist <= dSquared:
N[i, j] = 1
</code></pre>
<p>这个<code>dist</code>表达式看起来像</p>
^{pr2}$
<p>对于2个元素,这个数组表达式可能不会更快,但它应该有助于我们重新思考问题。在</p>
<p>我们可以用广播来执行<code>i,j</code>,<code>outter</code>问题</p>
<pre><code>A[:,None,:] - B[None,:,:] # 3d difference array
dist=((A[:,None,:] - B[None,:,:])**2).sum(axis=-1) # (lengthA,lengthB) array
</code></pre>
<p>将其与<code>dSquared</code>进行比较,并使用生成的布尔数组作为掩码,将<code>N</code>的元素设置为1:</p>
<pre><code>N = np.zeros((lengthA,lengthB))
N[dist <= dSquared] = 1
</code></pre>
<p>我还没有测试过这段代码,所以可能有一些bug,但我认为基本思想已经存在了。也许你的思考过程足够让你为其他的案例找出细节。在</p>