我对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`
其中rt
和r0
表示两个m by 3
表,其中包含配置。
实际上,它计算第一个配置中的向量与第二个配置中的任何其他向量之间的距离,检查阈值a
,并在所有位置上循环后返回总和。有没有一种聪明的方法可以避免显式的for循环?我觉得复杂性无法真正改变,但也许有一种方法可以避免构造本机的缓慢。
答案 0 :(得分:2)
以下内容如何:
from scipy.spatial.distance import cdist
import numpy as np
overlap = np.sum(cdist(rt, r0) <= a)
当我的计算机上m
为1000时,这大约快9倍。小阵列的速度要快得多