[英]Python - Get the min coordinate element of a 2d numpy array
我有這個2d numpy數組: [[0,2],[0,3],[0,1],[1,0]]
。 這些元素代表x
和y
軸上的點。 因此,例如,在[0,2]
0是x
而2是y
。
我想知道min x
和min y
。 在這種情況下,它將是[0,1]
。 我知道我可以通過for循環輕松地做到這一點,但是它占用了太多資源。 是否有一個numpy函數或一些計算方法?
你可以先找到的最小x
,然后找到的最小y
對對,其中x
等於最小x
:
np.min(xy[xy[:, 0] == np.min(xy[:, 0])], 0)
In [1]: xy
Out[1]:
array([[0, 2],
[0, 3],
[0, 1],
[1, 0]])
In [2]: np.min(xy[xy[:, 0] == np.min(xy[:, 0])], 0)
Out[2]: array([0, 1])
即使是大型陣列,它也相對較快:
In [4]: timeit.timeit('np.min(xy[xy[:, 0] == np.min(xy[:, 0])], 0)',
'import numpy as np; xy = np.random.rand(100000, 2)',
number = 100)
Out[4]: 0.06858562525758316
舊版本慢一些(在@OliverW。評論之前):
In [3]: timeit.timeit('np.min(xy[xy[:, 0] == np.min(xy, 0)[0]], 0)',
'import numpy as np; xy = np.random.rand(100000, 2)',
number = 100)
Out[3]: 0.20433111706540785
您可以使用NumPy內置的np.lexsort
進行此類排序,如下所示-
xy[np.lexsort(xy.T[::-1])[0]]
lexsort
獲取遵守這種優先級的排序索引,但相反的意義是這樣做,即最后一個元素,然后是第二個最后一個元素,依此類推,直到第一個元素。 因此,我們需要反轉元素的順序,這就是為什么附加[::-1]
。 此外, lexsort
可以根據需要沿着每一列而不是每一行工作,以解決我們的問題,因此我們需要在反轉之前進行transpose
。
樣品運行-
In [235]: xy
Out[235]:
array([[0, 2],
[0, 3],
[0, 1],
[1, 0]])
In [236]: xy[np.lexsort(xy.T[::-1])[0]]
Out[236]: array([0, 1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.