Numpy-在三维矩阵中查找网格点的空间位置(知道该网格点的索引)

Numpy-在三维矩阵中查找网格点的空间位置(知道该网格点的索引),numpy,numpy-ndarray,Numpy,Numpy Ndarray,所以我想我可能完全走错了方向,但基本上 我有一个三维网格,我在网格中的所有点上找到到测试点的所有距离 import numpy as np #crystal_lattice structure x,y,z = np.linspace(-2,2,5),np.linspace(-2,2,5),np.linspace(-2,2,5) xx,yy,zz = np.meshgrid(x,y,z) #testpoint point = np.array([1,1,1]) d = np.sqrt((poi

所以我想我可能完全走错了方向,但基本上

我有一个三维网格,我在网格中的所有点上找到到测试点的所有距离

import numpy as np
#crystal_lattice structure
x,y,z = np.linspace(-2,2,5),np.linspace(-2,2,5),np.linspace(-2,2,5)
xx,yy,zz = np.meshgrid(x,y,z)

#testpoint
point = np.array([1,1,1])

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

#np.shape(d) = (5, 5, 5)
然后我试图找到最接近测试点的网格点的坐标。 我的想法是对d进行排序(先展平然后搜索),得到最小值的索引

low_to_hi_d = np.sort(d, axis=None)  # axis=0 flattens the d, going to flatten the entire d array and then search
lowest_val = low_to_hi_d[0]
index = np.where(d == lowest_val)

#how do I get the spatial coordinates of my index, not just the position in ndarray (here the position in ndarray is (3,3,3) but the spatial position is (1,1,1), but if I do d[3,3,3] I get 0 (the value at spatial position (1,1,1))

在我的3d网格上使用该索引查找点坐标(而不是该点的d值)。我正在尝试类似的东西,我很确定我把它复杂化了如何获得最接近测试点的三维网格点的(x,y,z)?

我不能完全确定这是否是您想要的

您可以通过以下方法找到最小
d
的索引:

idx = np.unravel_index(np.argmin(d), d.shape)

(3, 3, 3)
并使用此项为网格网格编制索引:

xx[idx], yy[idx], zz[idx]

(1.0, 1.0, 1.0)

如果你只想找到最近点的坐标,那么你是对的,你走错了方向。生成网格网格并计算如此多重复项上的距离没有意义。您可以轻松、独立地在各个维度执行此操作:

import numpy as np
x,y,z = np.linspace(-2,2,5),np.linspace(-2,2,5),np.linspace(-2,2,5)
p=np.array([1,1,1])
closest=lambda x,p: x[np.argmin(np.abs(x-p))]
xc,yc,zc=closest(x,p[0]),closest(y,p[1]),closest(z,p[2])

是的,这正是我所需要的-另一个答案可能更有效,但这对我来说更容易坚持我已经拥有的东西抱歉,尝试了另一个,而且速度快得多,所以接受作为答案-尽管你的答案对我写的东西来说很好