2024-09-29 22:31:56 发布
网友
我得到了一个带有X,Y和Z坐标的CSV文件。我需要添加两列:R和NereastIdx,其中R表示到最近点(行)的距离,NereastIdx是该点的行号。每行都是唯一的点
R
NereastIdx
我正试图找到一个有效的方法来做到这一点。在我的第一次尝试中(使用pandas),我迭代了for循环中的所有行,计算了所有距离,计算了最小值,检查了索引,并为两个新列指定了值。但是速度太慢了。我在谷歌上搜索到KDTree可能有用,但老实说,我不知道如何在我的特殊情况下使用它
任何帮助都将受到感谢
查看最近邻图的实现,如sklearn.neighbors.kneighbors_graph。您尝试做的是相同的,所以请看库实现。 您可以找到有关它的更多信息: https://scikit-learn.org/stable/modules/neighbors.html#unsupervised-neighborshttps://scikit-learn.org/stable/modules/generated/sklearn.neighbors.kneighbors_graph.html#sklearn.neighbors.kneighbors_graph
sklearn.neighbors.kneighbors_graph
我认为您正在寻找这个(首先将数据导入numpy数组,或者使用熊猫数据帧中的.to_numpy()):
.to_numpy()
from scipy.spatial import KDTree pts_nn = np.hstack((pts, np.stack(KDTree(pts).query(pts, k=2))[:,:,1].T))
其中pts是点的Nx3数组(它实际上可以是任何维度点)。第4列是到最近邻的距离,第5列是最近邻行的索引
pts
Nx3
示例代码:
N = 10 pts = np.random.random((N, 3)) pts_nn: distance to nearest nearest neighbor X Y Z neighbor index | | | | | v v v v v [[0.36154214 0.11883743 0.04484198 0.15207073 6. ] [0.26106654 0.25574324 0.45306327 0.20522814 4. ] [0.15989573 0.55955844 0.63199334 0.35385276 8. ] [0.21143747 0.47216402 0.11990295 0.22398747 5. ] [0.10244485 0.12636136 0.43829583 0.20522814 1. ] [0.0101051 0.41025922 0.19608337 0.13800542 8. ] [0.24196598 0.03731428 0.09154342 0.15207073 0. ] [0.78249018 0.81468931 0.21105137 0.11227299 9. ] [0.06798827 0.41764963 0.32114501 0.13800542 5. ] [0.86526876 0.74024578 0.22558034 0.11227299 7. ]]
查看最近邻图的实现,如
sklearn.neighbors.kneighbors_graph
。您尝试做的是相同的,所以请看库实现。 您可以找到有关它的更多信息: https://scikit-learn.org/stable/modules/neighbors.html#unsupervised-neighborshttps://scikit-learn.org/stable/modules/generated/sklearn.neighbors.kneighbors_graph.html#sklearn.neighbors.kneighbors_graph我认为您正在寻找这个(首先将数据导入numpy数组,或者使用熊猫数据帧中的
.to_numpy()
):其中
pts
是点的Nx3
数组(它实际上可以是任何维度点)。第4列是到最近邻的距离,第5列是最近邻行的索引示例代码:
相关问题 更多 >
编程相关推荐