獲取最小陣列出來的多個陣列的說,我有4 numpy的陣列 [1,2,3] [2,3,1] [3,2,1] [1,2 3,2]通過順序在Python
在這種情況下,我確定[1,2,3]是我的目的的「最小數組」,因爲它是索引0處最低值的兩個數組之一,兩個數組具有最低的索引1.如果有更多的數組具有相似的值,則需要比較下一個索引值,依此類推。
如何從堆中以同樣的順序提取數組[1,2,3]?
我該如何擴展到x個大小爲n的數組?
由於
獲取最小陣列出來的多個陣列的說,我有4 numpy的陣列 [1,2,3] [2,3,1] [3,2,1] [1,2 3,2]通過順序在Python
在這種情況下,我確定[1,2,3]是我的目的的「最小數組」,因爲它是索引0處最低值的兩個數組之一,兩個數組具有最低的索引1.如果有更多的數組具有相似的值,則需要比較下一個索引值,依此類推。
如何從堆中以同樣的順序提取數組[1,2,3]?
我該如何擴展到x個大小爲n的數組?
由於
使用列表(未numpy的陣列)的一個列表中的蟒非numpy的的.sort()或排序()自動執行此例如
a = [[1,2,3],[2,3,1],[3,2,1],[1,3,2]]
a.sort()
給
[[1,2,3],[1,3,2],[2,3,1],[3,2,1]]
的numpy的排序似乎只子陣遞歸排序,以便它似乎是最好的辦法是首先將它轉換爲一個Python列表。假設你有一個數組的數組,你要挑最小的,你可以得到最低爲
sorted(a.tolist())[0]
正如有人指出,你也可以做min(a.tolist())
它使用相同類型比較的排序,並會更快對於大型數組(線性vs n log n漸近運行時間)。
下面是使用numpy的一個想法:
import numpy
a = numpy.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])
col = 0
while a.shape[0] > 1:
b = numpy.argmin(a[:,col:], axis=1)
a = a[b == numpy.min(b)]
col += 1
print a
這將檢查逐列,直到只有一行離開了。
numpy的lexsort接近你想要的。它首先排序最後一個鍵,但這很容易解決:
>>> a = np.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])
>>> order = np.lexsort(a[:, ::-1].T)
>>> order
array([0, 3, 1, 2])
>>> a[order]
array([[1, 2, 3],
[1, 3, 2],
[2, 3, 1],
[3, 2, 1]])
感謝,排序(a.tolist())[0]是我一直在尋找。乾杯 – Asterick 2012-03-02 18:23:48
如果你可以將一個numpy數組轉換爲列表,你可以通過調用min(l)來獲得。 – jaime 2012-03-02 18:25:33
很好的回答(+1)。但爲了擴大這個範圍,我會補充說排序需要O(nlogn)時間,而你可以使用'min(a.tolist())'來獲得O(n)所需的時間。 – inspectorG4dget 2012-03-02 18:31:01