numpy中提供了各種排序相關的函式。這些排序函式實現了不同的排序演算法,每個演算法的特點是執行速度、最壞情況效能、所需的工作空間和演算法的穩定性。下表為三種排序演算法的比較。
種類速度
最差情況
工作區穩定性
『quicksort』
1o(n^2)0no
『mergesort』
2o(n*log(n))
~n/2
yes『heapsort』
3o(n*log(n))0no
sort()
對陣列進行排序,返回排好序的陣列副本。可以指定軸方向。
函式語法:
numpy.sort(a, axis, kind, order)
引數
示例
import numpy as np
a = np.array([[3,7],[9,1]])
print ('陣列:' )
print (a)
print ('\n')
print ('排序:' )
print (np.sort(a))
print ('\n')
print ('軸 0 排序:')
print (np.sort(a, axis = 0))
print ('\n')
# 排序函式中的順序引數
dt = np.dtype([('name', 's10'),('age', int)])
a = np.array([("kevin", 21),("peter",25),("tony", 17), ("mike",27)], dtype = dt)
print ('陣列:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order = 'name'))
輸出
陣列:
[[3 7]
[9 1]]
排序:[[3 7]
[1 9]]
軸 0 排序:
[[3 1]
[9 7]]
陣列:[(b'kevin', 21) (b'peter', 25) (b'tony', 17) (b'mike', 27)]
按 name 排序:
[(b'kevin', 21) (b'mike', 27) (b'peter', 25) (b'tony', 17)]
該函式先對陣列進行排序,然後提取排序後的陣列索引,以陣列形式返回,原陣列不會被修改,通過索引可以得到排序結果。
示例
import numpy as np
x = np.array([3, 1, 2])
print ('陣列x:')
print (x)
print ('\n')
print ('將argsort()應用於x:')
y = np.argsort(x)
print (y)
print ('\n')
print ('按排序順序重建原始陣列:' )
print (x[y])
print ('\n')
print ('使用迴圈重構原始陣列:')
for i in y:
print (x[i])
輸出
陣列x:
[3 1 2]
將argsort()應用於x:
[1 2 0]
按排序順序重建原始陣列:
[1 2 3]
使用迴圈重構原始陣列:
1 2
3
用於對多個序列進行排序,類似於sql中的orderby多個字段:order by 欄位1, 欄位2, 欄位3
。可以想象成對電子**進行排序,每一列代表乙個序列,越後面的列優先順序越高。
原陣列不會被修改,該函式提取排序後的陣列索引,以陣列形式返回,通過索引可以得到排序結果。
示例
import numpy as np
a = np.array(['a','b','c','d','e'])
b = np.array([12, 90, 380, 12, 211])
ind = np.lexsort((a,b))
print("列印排序後的陣列索引:")
print(ind)
print("使用索引對陣列排序:")
for i in ind:
print(a[i],b[i])
輸出
列印排序後的陣列索引:
[0 3 1 4 2]
使用索引對陣列排序:
a 12
d 12
b 90
e 211
c 380
這兩個函式分別返回指定軸上,最大和最小元素的索引。
示例
import numpy as np
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print ('陣列:')
print (a)
print ('\n')
print ('應用argmax()函式:')
print (np.argmax(a, 0))
print ('\n')
print ('應用argmin()函式:')
print (np.argmin(a, 0) )
print ('\n')
輸出
陣列:
[[30 40 70]
[80 20 10]
[50 90 60]]
應用argmax()函式:
[1 2 0]
應用argmin()函式:
[0 1 1]
該函式返回陣列中非零元素的索引。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print("列印原始陣列\n", b)
print ('\n')
print("列印非零元素的位置")
print(b.nonzero())
輸出
列印原始陣列
[ 12 90 380 12 211]
列印非零元素的位置
(array([0, 1, 2, 3, 4]),)
該函式查詢陣列中符合條件的元素,返回其索引。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print(np.where(b>12))
c = np.array([[20, 24],[21, 23]])
print(np.where(c>20))
輸出
(array([0, 1, 1]), array([1, 0, 1]))
該函式返回陣列中符合條件的元素。
示例
import numpy as np
b = np.array([12, 90, 380, 12, 211])
print(np.extract(b>12, b))
c = np.array([[20, 24],[21, 23]])
print(np.extract(c>20, c))
輸出
[ 90 380 211]
[24 21 23]
numpy系列 5 索引 切片 排序 搜尋和計數
a 1 1 a 1,2,3 array 1,2,3 a 1,2 或者 a 1 2 7 注意 若是python的list型別正確語法只能是a 1 2 a 1,2 3,4 獲取a 1,3 和a 2,4 的值 array 8,14 a 0,1 1,2 1,2 獲取a 0,1,1 和a 1,2,2 的值 a...
python計數排序 Python 計數排序
1.python coding utf 8 def counting sort a,b,k 計數排序,偽碼如下 counting sort a,b,k 1 for i 0 to k 初始化儲存區的值 2 do c i 0 3 for j 1 to length a 為各值計數 4 do c a j ...
排序 計數排序
資料結構和演算法系列目錄 不斷更新 計數排序是一種線性時間的排序,它的時間複雜程度為o n 雖然是線性的時間複雜程度,但是它的空間複雜程度比較高,而且用之前需要有乙個硬性的前提。這個前提在後面給出,這裡先來簡單介紹一下計數排序。計數排序是先掃瞄一邊待排序陣列,並用乙個輔助陣列記錄待排序每個元素應該在...