Numpy数组排序与查询操作
在进行数组操作的时候我们可能需要对数组进行排序和查询。排序中需要注意是按行排序,还是按列排序,或者是整体排序。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
1. sort()排序
这里需要特别注意的是,sort 方法中 axis 参数指的是排序的方向,0 指按行进行操作,1 指按列进行操作。示例代码如下。In [1]: import numpy as np In [2]: a = np.array([[1,4], ...: [3,2]])因为当 axis=0 时比较小的值排在第 1 行,比较大的值排在第 2 行。
In [3]: np.sort(a,axis=0) # 按行排序 Out[3]: array([[1, 2], [3, 4]])当 axis=1 时比较小的值排在第 1 列,而比较大的值则排在第 2 列。
In [4]: np.sort(a,axis=1) # 按列排序 Out[4]: array([[1, 4], [2, 3]])当 axis=None 时,按整体进行排序,数组将会被压缩为一个序列。
In [5]: np.sort(a,axis=None) # 整体排序 Out[5]: array([1, 2, 3, 4])
2. argsort()排序
argsort 方法用来返回排序的值,这个值代表了该值在该排序方式下的顺序,会根据 axis 设置的不同方式返回不同的值。In [6]: np.argsort(a,axis=0) # 按行返回元素序号 Out[6]: array([[0, 1], [1, 0]], dtype=int64) In [7]: np.argsort(a,axis=1) # 按列返回元素序号 Out[7]: array([[0, 1], [1, 0]], dtype=int64) In [8]: np.argsort(a,axis=None) # 整体返回元素序号 Out[8]: array([0, 3, 2, 1], dtype=int64)
3. 使用where()查询数组
在查询数组的过程中,最常用到的是 where 方法,该方法返回的是符合条件的值的坐标。另外,还可以通过 argmax 等方法获得数组中最大值和最小值的坐标,注意 axis 参数的设定。示例代码如下。In [1]: import numpy as np In [2]: a = np.array([[1,2,3,4], ...: [5,6,7,8], ...: [9,10,11,12], ...: [13,14,15,16]])where 方法用来返回符合条件的坐标,比如我们想要获得大于 7 的所有值的坐标,可以看出 8 是第一个比 7 大的数字,所以数字 8 的坐标 [1,3] 会被返回,同样的道理, 9 的坐标 [2,0] 也会被返回。
这里需要注意的是,返回的形式是将所有元素的横坐标放在一个数组里,然后将所有元素的纵坐标放在另一个数组里。这种做法的好处是方便以后取值。
In [3]: index=np.where(a > 7) In [4]: index Out[4]: (array([1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))可以直接将上述结果用索引方法索引出来。
In [5]: a[index] Out[5]: array([ 8, 9, 10, 11, 12, 13, 14, 15, 16])
4. argmax()查询最大值坐标
argmax 方法用来获得行列里最大值的坐标,这里可以通过指定 axis 获得最大值所在的行。可以看到在数组 a 中,各个列的坐标的最大值都是在第 3 行。In [6]: np.argmax(a,axis=0) #按行获取最大值的坐标 Out[6]: array([3, 3, 3, 3], dtype=int64)同理,可以通过 argmax 方法获得每一行最大值所在的列。
In [7]: np.argmax(a, axis=1) #按列获取最大值的坐标 Out[7]: array([3, 3, 3, 3], dtype=int64)类似地,可以获得该数组最大值所在的位置,这样的操作其实是将数组先转换为一个序列,然后返回这个序列的下标。
In [8]: np.argmax(a, axis=None) # 整体获得最大值的坐标 Out[8]: 15
5. argmin()查询最小值坐标
argmin 方法和 argmax 方法对应,用来获得最小值的下标,这里不再赘述。In [9]: np.argmin(a, axis=0) # 按行获得最小值的坐标 Out[9]: array([0, 0, 0, 0], dtype=int64) In [10]: np.argmin(a, axis=1) # 按列获得最小值的坐标 Out[10]: array([0, 0, 0, 0], dtype=int64) In [11]: np.argmin(a, axis=None) # 整体获得最小值的坐标 Out[11]: 0
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。