📅  最后修改于: 2020-04-19 13:02:49             🧑  作者: Mango
排序是指以特定格式排列数据。排序算法指定了按特定顺序排列数据的方式。最常见的顺序是按数字顺序或字典顺序。在Numpy中,我们可以使用库中提供的各种函数(例如sort,lexsort,argsort等)执行各种排序操作。
numpy.sort():此函数返回数组的排序副本。
# 导入库
import numpy as np
# 沿第一轴排序
a = np.array([[12, 15], [10, 1]])
arr1 = np.sort(a, axis = 0)
print ("沿第一轴 : \n", arr1)
# 沿最后一个轴排序
a = np.array([[10, 15], [12, 1]])
arr2 = np.sort(a, axis = -1)
print ("\n沿第一轴 : \n", arr2)
a = np.array([[12, 15], [10, 1]])
arr1 = np.sort(a, axis = None)
print ("\n无轴 : \n", arr1)
输出:
沿第一轴 :
[[10 1]
[12 15]]
沿第一轴 :
[[10 15]
[ 1 12]]
无轴 :
[ 1 10 12 15]
numpy.argsort():此函数返回对数组进行排序的索引。
# Python代码演示numpy.argsort的工作
import numpy as np
# numpy数组创建
a = np.array([9, 3, 1, 7, 4, 3, 6])
# 未排序的阵列打印
print('原始阵列:\n', a)
# 排序数组索引
b = np.argsort(a)
print('原始数组的排序索引->', b)
# 使用排序索引获取排序数组,c是与b相同len的临时数组
c = np.zeros(len(b), dtype = int)
for i in range(0, len(b)):
c[i]= a[b[i]]
print('排序数组->', c)
输出:
原始阵列:
[9 3 1 7 4 3 6]
原始数组的排序索引-> [2 1 5 4 6 3 0]
排序数组-> [1 3 3 4 6 7 9]
numpy.lexsort():此函数使用一系列键返回间接稳定排序。
# Python代码演示numpy.lexsort()的工作
import numpy as np
# 创建了Numpy数组
# 第一列
a = np.array([9, 3, 1, 3, 4, 3, 6])
# 第二栏
b = np.array([4, 6, 9, 2, 1, 8, 7])
print('a列,b列')
for (i, j) in zip(a, b):
print(i, ' ', j)
# 按a排序,然后按b排序
ind = np.lexsort((b, a))
print('Sorted indices->', ind)
输出:
a列,b列
9 4
3 6
1 9
3 2
4 1
3 8
6 7
排序索引-> [2 3 1 5 4 6 0]
函数 | 描述 |
---|---|
numpy.ndarray.sort() | 就地对数组进行排序。 |
numpy.msort() | 返回沿第一个轴排序的数组的副本。 |
numpy.sort_complex() | 首先使用实部,然后使用虚部对复杂数组进行排序。 |
numpy.partition() | 返回数组的分区副本。 |
numpy.argpartition() | 使用kind关键字指定的算法,沿给定轴执行间接分区。 |
搜索是一种有助于查找给定元素或值在列表中的位置的操作或技术。在Numpy中,我们可以使用库中提供的各种函数(例如argmax,argmin,nanaargmax等)执行各种搜索操作。
numpy.argmax():此函数返回特定轴上数组max元素的索引。
# Python程序说明argmax()的工作方式
import numpy as np
# 处理二维阵列
array = np.arange(12).reshape(3, 4)
print("输入阵列 : \n", array)
# 未提及轴,因此适用于整个阵列
print("\n最大元素 : ", np.argmax(array))
# 根据索引返回最大元素的索引
print(("\n最大元素指数 : "
, np.argmax(array, axis=0)))
print(("\n最大元素指数 : "
, np.argmax(array, axis=1)))
输出:
输入阵列 :
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
最大元素 : 11
最大元素指数 : [2 2 2 2]
最大元素指数 : [3 3 3]
numpy.nanargmax():此函数返回特定轴上数组的max元素的索引,而忽略NaN。如果切片仅包含NaN和Infs,则结果不可信任。
# Python程序说明nanargmax()的工作方式
import numpy as np
# 处理一维阵列
array = [np.nan, 4, 2, 3, 1]
print("输入阵列 1 : \n", array)
array2 = np.array([[np.nan, 4], [1, 3]])
# 忽略NaN的索引返回最大元素的索引
print(("\n数组1中的最大值的索引 : "
, np.nanargmax(array)))
# 处理二维阵列
print("\n输入阵列2: \n", array2)
print(("\n数组2中的最大值索引 : "
, np.nanargmax(array2)))
print(("\n数组2的轴1处的索引 : "
, np.nanargmax(array2, axis = 1)))
输出:
输入阵列 1 :
[nan, 4, 2, 3, 1]
数组1中的最大值的索引 : 1
输入阵列2 :
[[ nan 4.]
[ 1. 3.]]
数组2中的最大值索引 : 1
数组2的轴1处的索引 : [1 1]
numpy.argmin():此函数返回沿轴返回最小值的索引。
# Python程序说明argmin()的工作
import numpy as np
# 处理一维阵列
array = np.arange(8)
print("输入矩阵 : \n", array)
# 根据索引返回最小元素的索引
print("\n最小元素指标 : ", np.argmin(array, axis=0))
输出:
输入矩阵 :
[0 1 2 3 4 5 6 7]
最小元素指标 : 0
函数 | 描述 |
---|---|
numpy.nanargmin() | 返回指定轴上最小值的索引,忽略NaN。 |
numpy.argwhere() | 查找按元素分组的非零数组元素的索引。 |
numpy.nonzero() | 返回非零元素的索引。 |
numpy.flatnonzero() | 在a的展平版本中返回非零的索引。 |
numpy.where() | 根据条件从x或y中选择返回元素。 |
numpy.searchsorted() | 查找应在其中插入元素以保持顺序的索引。 |
numpy.extract() | 返回满足某些条件的数组元素。 |
numpy.count_nonzero():计算数组中非零值的数量。
# Python程序说明count_nonzero()的工作方式
import numpy as np
# 计算非零值
a = np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]])
b = np.count_nonzero(([[0,1,7,0,0],[3,0,0,2,19]]
, axis=0))
print("非零值的数量为 :",a)
print("非零值的数量为 :",b)
输出:
非零值的数量为 : 5
非零值的数量为 : [1, 1, 1, 1, 1]