Numpy,避免在3d数组差异嵌套求和中循环

时间:2014-09-08 16:22:30

标签: python arrays numpy

我对Numpy有一个简单的问题:我有三维坐标,我想用以下函数计算两个不同配置之间的重叠

def Overlap(rt, r0,a):
    s=0
    for i in range(len(rt)):
        s+=(( pl.norm(r0[i]-rt ,axis=1) <=a).astype('int')).sum()
    return s`

其中rtr0表示两个m by 3表,其中包含配置。 实际上,它计算第一个配置中的向量与第二个配置中的任何其他向量之间的距离,检查阈值a,并在所有位置上循环后返回总和。有没有一种聪明的方法可以避免显式的for循环?我觉得复杂性无法真正改变,但也许有一种方法可以避免构造本机的缓慢。

1 个答案:

答案 0 :(得分:2)

以下内容如何:

from scipy.spatial.distance import cdist
import numpy as np
overlap = np.sum(cdist(rt, r0) <= a)

当我的计算机上m为1000时,这大约快9倍。小阵列的速度要快得多