NumPy 排序、條件刷選函數
NumPy 提供了多種排序的方法。 這些排序函數實現不同的排序算法,每個排序算法的特征在於執行速度,最壞情況性能,所需的工作空間和算法的穩定性。 下表顯示了三種排序算法的比較。
種類 | 速度 | 最壞情況 | 工作空間 | 穩定性 |
---|---|---|---|---|
'quicksort' (快速排序) |
1 | O(n^2) |
0 | 否 |
'mergesort' (歸並排序) |
2 | O(n*log(n)) |
~n/2 | 是 |
'heapsort' (堆排序) |
3 | O(n*log(n)) |
0 | 否 |
numpy.sort()
numpy.sort() 函數返回輸入數組的排序副本。函數格式如下:
numpy.sort(a, axis, kind, order)
參數說明:
- a: 要排序的數組
- axis: 沿着它排序數組的軸,如果沒有數組會被展開,沿着最后的軸排序, axis=0 按列排序,axis=1 按行排序
- kind: 默認為'quicksort'(快速排序)
- order: 如果數組包含字段,則是要排序的字段
numpy.argsort()
numpy.argsort() 函數返回的是數組值從小到大的索引值。
numpy.lexsort()
numpy.lexsort() 用於對多個序列進行排序。把它想象成對電子表格進行排序,每一列代表一個序列,排序時優先照顧靠后的列。
import numpy as np
nm = ('raju','anil','ravi','amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv,nm))
print ('調用 lexsort() 函數:')
print (ind)
print ('\n')
print ('使用這個索引來獲取排序后的數據:')
print ([nm[i] + ", " + dv[i] for i in ind])
import numpy as np
nm = ('raju','anil','ravi','amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv,nm))
print ('調用 lexsort() 函數:')
print (ind)
print ('\n')
print ('使用這個索引來獲取排序后的數據:')
print ([nm[i] + ", " + dv[i] for i in ind])
上面傳入 np.lexsort 的是一個tuple,排序時首先排 nm,順序為:amar、anil、raju、ravi 。綜上排序結果為 [3 1 0 2]。
msort、sort_complex、partition、argpartition
函數 | 描述 |
---|---|
msort(a) | 數組按第一個軸排序,返回排序后的數組副本。np.msort(a) 相等於 np.sort(a, axis=0)。 |
sort_complex(a) | 對復數按照先實部后虛部的順序進行排序。 |
partition(a, kth[, axis, kind, order]) | 指定一個數,對數組進行分區 |
argpartition(a, kth[, axis, kind, order]) | 可以通過關鍵字 kind 指定算法沿着指定軸對數組進行分區 |
numpy.argmax() 和 numpy.argmin()
numpy.argmax() 和 numpy.argmin()函數分別沿給定軸返回最大和最小元素的索引。
numpy.nonzero()
numpy.nonzero() 函數返回輸入數組中非零元素的索引。
numpy.where()
numpy.where() 函數返回輸入數組中滿足給定條件的元素的索引。
numpy.extract()
numpy.extract() 函數根據某個條件從數組中抽取元素,返回滿條件的元素。
import numpy as np
x = np.arange(9.).reshape(3, 3)
print ('我們的數組是:')
print (x)
# 定義條件, 選擇偶數元素
condition = np.mod(x,2) == 0
print ('按元素的條件值:')
print (condition)
print ('使用條件提取元素:')
print (np.extract(condition, x))