[英]Sort a numpy-array according to specific column
考慮一個 numpy 數組,如下所示:
coords = [[34. 22.]
[11. 38.]
[22. 56.]
[23. 22.]
[86. 30.]]
此數組包含 5 個點的 x 和 y 坐標。 我正在尋找這個數組中具有最小 y 坐標的點。 我可以很容易地找到它使用
idx = np.argpartition(coords[:,1],1)[0]
pt = coords[idx]
沒問題。 除了coords
中實際上有兩個點具有相同的最小 y 值:22
我想要具有較小 x 值的點,即不是[34 22]
我想要[23 22]
。
這已經不是小事了。 因為我希望能夠為任意坐標矩陣找到這樣的點。 即可能有許多點具有相同的最小 y 坐標。 不止兩個。 然后我想根據它們的 x 坐標對它們進行排序。
我開始用一個丑陋的 for 循環來解決這個問題,但失敗了。 這是我到目前為止:
noPoints = coords.shape[0]
y = []
for i in range(0, noPoints-1):
minIdx = 0
for j in range(i+1, noPoints):
if coords[j][1] < coords[i][1]:
minIdx = j
好。 我可以找到最小的 y 值。 但就是這樣。 我開始相信這個任務不能用 numpy-arrays 來解決。
您可以使用結構化的numpy 數組和numpy 排序中的order=
可選關鍵字來做到這一點:
>>> x = np.array([(34.,22.),(11., 38.),(22.,56.),(23., 22.),(86.,30.)], dtype = [('x',float),('y',float)])
>>> x
array([(34., 22.), (11., 38.), (22., 56.), (23., 22.), (86., 30.)],
dtype=[('x', '<f8'), ('y', '<f8')])
>>> x.sort(order = ['y','x'])
>>> x
array([(23., 22.), (34., 22.), (86., 30.), (11., 38.), (22., 56.)],
dtype=[('x', '<f8'), ('y', '<f8')])
你可以使用np.lexsort :
coords[np.lexsort((coords[:,1], coords[:,0]))]
輸出:
array([[11., 38.],
[22., 56.],
[23., 22.],
[34., 22.],
[86., 30.]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.