相关疑难解决方法(0)

使用numpy在python中进行向量化空间距离

我在python中有numpy数组,其中包含很多(10k +)3D顶点(坐标为[x,y,z]的向量)。我需要计算这些点所有可能的对之间的距离。

使用scipy很容易:

import scipy
D = spdist.cdist(verts, verts)
Run Code Online (Sandbox Code Playgroud)

但是由于引入新依赖项的项目政策,我无法使用它。

所以我想出了这个天真的代码:

def vert_dist(self, A, B):
    return ((B[0]-A[0])**2+(B[1]-A[1])**2+(B[2]-A[2])**2)**(1.0/2)

# Pairwise distance between verts
#Use SciPy, otherwise use fallback
try:
    import scipy.spatial.distance as spdist
    D = spdist.cdist(verts, verts)
except ImportError:
    #FIXME: This is VERY SLOW:
    D = np.empty((len(verts), len(verts)), dtype=np.float64)
    for i,v in enumerate(verts):
        #self.app.setStatus(_("Calculating distance %d of %d (SciPy not installed => using SLOW AF fallback method)"%(i,len(verts))), True)
        for j in range(i,len(verts)):
            D[j][i] = D[i][j] = self.vert_dist(v,verts[j])
Run Code Online (Sandbox Code Playgroud)

vert_dist()计算两个顶点之间的3D距离,其余代码仅对1D数组中的顶点进行迭代,并且对于每个顶点,它计算同一数组中彼此之间的距离并生成2D距离数组。

但这与scipy的本机C代码相比非常慢(1000倍)。我想知道我是否可以使用纯numpy加快速度。至少在某种程度上。

一些更多信息:https …

python numpy scipy multidimensional-array vertex

1
推荐指数
1
解决办法
808
查看次数

标签 统计

multidimensional-array ×1

numpy ×1

python ×1

scipy ×1

vertex ×1