NumPy 排序 查詢 計數

2022-09-05 02:18:09 字數 4177 閱讀 6890

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 雖然是線性的時間複雜程度,但是它的空間複雜程度比較高,而且用之前需要有乙個硬性的前提。這個前提在後面給出,這裡先來簡單介紹一下計數排序。計數排序是先掃瞄一邊待排序陣列,並用乙個輔助陣列記錄待排序每個元素應該在...