省略進口的......我沒有你的數據,所以我有僞造一些...
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/ –