省略进口的......我没有你的数据,所以我有伪造一些...
In [40]: x = np.random.random(100)
In [41]: y = np.random.random(100)
In [42]: z = np.random.random(100)
In [43]: p = np.random.random(3)
In [44]: p
Out[44]: array([ 0.60515083, 0.39263392, 0.36129813])
即坐标三个阵列和一个点,我将搜索邻居。
接下来,我们来看看如何构造一个数组,其行数与不同的数据点和三个柱体一样多......
In [45]: np.vstack((x,y,z)).T.shape
Out[45]: (100, 3)
好吧,它是正确的。
我们从scipy.spatial
In [46]: tree = KDTree(np.vstack((x,y,z)).T)
建立使用KDTree
的kd树,然后我们用的树中,恰当地命名.query_ball_point()
,其中一种方法找到点的指数接近p
In [47]: indices = tree.query_ball_point(p, 0.33)
其中我已经使用了任意半径等于1/3的半径。
最后,我们希望看到这些邻居,所以我会用树的.data
属性和我刚刚计算这样
In [48]: tree.data[indices]
Out[48]:
array([[ 0.4117843 , 0.21440852, 0.3352732 ],
[ 0.48921727, 0.13855976, 0.43331816],
[ 0.71598133, 0.32270361, 0.20292187],
[ 0.71761991, 0.27309708, 0.12670474],
[ 0.6282775 , 0.13752325, 0.4143872 ],
[ 0.55995847, 0.31302848, 0.2780926 ],
[ 0.75896359, 0.16043536, 0.33530071],
[ 0.81138529, 0.64635994, 0.33819097],
[ 0.43537193, 0.5353203 , 0.52095431],
[ 0.66996807, 0.48346547, 0.52761835],
[ 0.69426851, 0.24725511, 0.57650329],
[ 0.5350322 , 0.23155768, 0.62545958],
[ 0.51228139, 0.38078056, 0.61246054]])
指数,这一切......
如果我理解正确,你有一个* single * Nx3点的数组,并且对于该数组中的每个点,您想要计算其中某个半径范围内的其他点的数量? –
@ali_m它们有3个独立的数组,每个坐标一个,他们想要在所描述的点中找到接近新点的点。 – gboffi
我不知道这是否对这个特定问题有用,我对kd树不是很大(尽管我可能应该),但是我发现这是一个有用的库:https://networkx.github。 io/ –