章节

Numpy 介绍

Numpy 安装

NumPy ndarray

NumPy 数据类型

NumPy 数组创建

NumPy 基于已有数据创建数组

NumPy 基于数值区间创建数组

NumPy 数组切片

NumPy 广播

NumPy 数组迭代

NumPy 位运算

NumPy 字符串函数

NumPy 数学函数

NumPy 统计函数

NumPy 排序、查找、计数

NumPy 副本和视图

NumPy 矩阵库函数

NumPy 线性代数



NumPy中提供了各种排序相关的函数。这些排序函数实现了不同的排序算法,每个算法的特点是执行速度、最坏情况性能、所需的工作空间和算法的稳定性。下表为三种排序算法的比较。

种类

速度

最差情况

工作区

稳定性

‘quicksort’

1

O(n^2)

0

no

‘mergesort’

2

O(n*log(n))

~n/2

yes

‘heapsort’

3

O(n*log(n))

0

no

numpy.sort()

sort()对数组进行排序,返回排好序的数组副本。可以指定轴方向。

函数语法:

numpy.sort(a, axis, kind, order)

参数

  • a 待排序数组
  • axis 指定排序的轴。如果没有,按最后一个轴排序。
  • kind 默认是‘quicksort’
  • 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)]

numpy.argsort()

该函数先对数组进行排序,然后提取排序后的数组索引,以数组形式返回,原数组不会被修改,通过索引可以得到排序结果。

示例

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

numpy.lexsort()

用于对多个序列进行排序,类似于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

numpy.argmax() 与 numpy.argmin()

这两个函数分别返回指定轴上,最大和最小元素的索引。

示例

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]

numpy.nonzero()

该函数返回数组中非零元素的索引。

示例

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]),)

numpy.where()

该函数查找数组中符合条件的元素,返回其索引。

示例

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]))

numpy.extract()

该函数返回数组中符合条件的元素。

示例

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]