簡體   English   中英

Python-獲取二維numpy數組的最小坐標元素

[英]Python - Get the min coordinate element of a 2d numpy array

我有這個2d numpy數組: [[0,2],[0,3],[0,1],[1,0]] 這些元素代表xy軸上的點。 因此,例如,在[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM