Numpy-为三维网格上的所有网格点查找到测试点的三维距离

Numpy-为三维网格上的所有网格点查找到测试点的三维距离,numpy,numpy-einsum,Numpy,Numpy Einsum,我尝试了np.hypot()和np.linalg.norm(),但它们都有一些问题(至少我是如何使用thm的) 我很确定np.hypot只能计算二维距离。如果我有一个测试点P(1,1,1)和一个网格点G(3,3,3),那么网格点G的返回值将类似于:((3-1)^2+(3-1)^2)^(0.5)=2.82 我可以直接调用np.hypot,而不必通过网格点进行循环(我猜循环速度很慢,因此很糟糕),我得到了这些距离测试点的值,这些值在我的三维网格的所有网格点返回,但是没有计算z相关性(即d在(1,2,

我尝试了np.hypot()和np.linalg.norm(),但它们都有一些问题(至少我是如何使用thm的)

我很确定np.hypot只能计算二维距离。如果我有一个测试点P(1,1,1)和一个网格点G(3,3,3),那么网格点G的返回值将类似于:((3-1)^2+(3-1)^2)^(0.5)=2.82

我可以直接调用np.hypot,而不必通过网格点进行循环(我猜循环速度很慢,因此很糟糕),我得到了这些距离测试点的值,这些值在我的三维网格的所有网格点返回,但是没有计算z相关性(即d在(1,2,0)处)=d在(1,2,3):

使用np.linalg.norm,我不知道如何在我的网格上的所有点上获得元素计算的返回值,传入的参数似乎是点a(网格点)和点B(测试点),但是除了如下循环之外,我想不出任何方法来计算所有网格点:

for i in x:
    for j in y:
        for k in z:
            #not mapped back to a gridpoint, do not know what to do
            d = np.linalg.norm(np.array([i,j,k])-point)
有人知道我如何在3d网格上找到所有网格点到测试点的真实3d距离吗?

简单地说:

d = np.sqrt((point[0]-xx)**2 + (point[1]-yy)**2 + (point[2]-zz)**2)
简单地说:

d = np.sqrt((point[0]-xx)**2 + (point[1]-yy)**2 + (point[2]-zz)**2)

下面是一个计算n维向量相互距离的简单函数:

def _distance2(v):
    nrm=np.sum(v**2,axis=0,keepdims=True)
    return nrm+nrm.T-2* v.T @ v

行是点,列是维度,因此在您的情况下,您可以将数据展平。您还可以使用一般的想法将其处理为数据所在的任何形式。

这里有一个简单的函数来计算n维向量的相互距离:

def _distance2(v):
    nrm=np.sum(v**2,axis=0,keepdims=True)
    return nrm+nrm.T-2* v.T @ v

行是点,列是维度,因此在您的例子中,您可以将数据展平。您也可以使用一般的想法将其处理为数据所在的任何形式。

只需使用
scipy.spatial.distance.cdist(points,[test_point])
。只需使用
scipy.spatial.distance.cdist(points,[test_point])