『Numpy學習指南』排序&索引&抽取函數介紹


排序:

numpy.lexsort():

numpy.lexsort()是個排字典序函數,因為很有意思,感覺也蠻有用的,所以單獨列出來講一下:

強調一點,本函數只接受一個參數

1 import numpy as np
2 
3 a = np.array([1,2,3,4,5])
4 b = np.array([50,40,30,20,10])
5 
6 c = np.lexsort((a,b))
7 print(list(zip(a[c],b[c])))
[(5, 10), (4, 20), (3, 30), (2, 40), (1, 50)]

 這是一個間接排序函數,會優先使用后面列排序,后面一樣才使用前面的列排序,測試如下:

1 a = np.array([1,2,3,4,5])
2 b = np.array([40,40,30,20,10])
3 
4 c = np.lexsort((a,b))
5 print(list(zip(a[c],b[c])))
[(5, 10), (4, 20), (3, 30), (1, 40), (2, 40)]

 交換次序:

1 a,b = b,a
2 
3 c = np.lexsort((a,b))
4 print(list(zip(a[c],b[c])))
[(40, 1), (40, 2), (30, 3), (20, 4), (10, 5)]

 而且可以按照此規則進行多列排序(大於2個):

1 a = np.array([1,2,3,4,5])
2 b = np.array([50,30,40,20,10])
3 d = np.array([400,300,300,100,200])
4 
5 c = np.lexsort((a,b,d))
6 print(list(zip(a[c],b[c],d[c])))
[(4, 20, 100), (5, 10, 200), (2, 30, 300), (3, 40, 300), (1, 50, 400)]

 numpy中的幾種排序手段:

numpy.sort()           正常排序

numpy.msort()        正常排序,定死axis=0

Notes
    -----
    ``np.msort(a)`` is equivalent to  ``np.sort(a, axis=0)``.

array.sort()              原地排序,無return

numpy.argsort()       間接排序

numpy.lexsort()        間接排序,字典序

numpy.sort_complex()      復數排序,先實部后虛部

1 np.random.seed(42)
2 complex_number = np.random.random(5) + np.random.random(5)*1j
3 print(complex_number)
4 print(np.sort_complex(complex_number)) # 復數排序,先實后虛
[ 0.37454012+0.15599452j  0.95071431+0.05808361j  0.73199394+0.86617615j
  0.59865848+0.60111501j  0.15601864+0.70807258j]
[ 0.15601864+0.70807258j  0.37454012+0.15599452j  0.59865848+0.60111501j
  0.73199394+0.86617615j  0.95071431+0.05808361j]

 索引:

np.argmax(a)              最大值索引

np.nanargmin(b)         忽略nan的最小值索引

np.argwhere(a<=4)     符合條件的索引

1 a = np.array([2,4,8])
2 print(np.argmax(a))
3 b = np.array([np.nan,2,4])
4 print(np.nanargmin(b))
5 c = np.array([2,4,8])
6 print(np.argwhere(a<=4))
2
1
[[0]
 [1]]

np.searchsorted(a,[-2,7])

np.insert(a,indices,[-2,7])

1 a = np.arange(5)
2 indices = np.searchsorted(a,[-2,7])   # 返回向有序數組中插入,不改變有序性的索引
3 print(indices)
4 print(np.insert(a,indices,[-2,7]))    # 插入函數{目標數組,插入索引,插入數組}
[0 5]
[-2  0  1  2  3  4  7]

 抽取:

np.extract(condition,a)

np.where(a%2==0)

np.nonzero(a)

1 a = np.arange(7)
2 condition = (a%2)==0
3 print(a[a%2==0])                   # 使用布爾索引
4 print(np.extract(condition,a))     # 使用np.extract()
5 print(np.where(a%2==0))            # 使用np.where()
6 print(np.nonzero(a))               # 提取非零元素
[0 2 4 6]
[0 2 4 6]
(array([0, 2, 4, 6]),)
(array([1, 2, 3, 4, 5, 6]),)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM