python进阶—numpy进阶(二)

主要内容:排序,搜索

  python列表排序

a = [1,2,3,4,5]
# 排序
a.sort()  # 默认升序排序,无返回值,直接修改列表元素顺序
a.sort(reverse=True)  # 按照升序排序
sorted(a)  # 内建函数排序,有返回值,创建新的列表对象

numpy列表排序

numpy提供多种排序函数,如下:

import numpy as np

a = np.array([1, 4, 3, 2], [2, 1, 3, 4])
# ndarray.sort(),无返回值
a.sort()  # None

# np.sort(a,axis=1,kind="quicksort",order=None),有返回值
"""
    Parameters
    -----------------------
    :param a:需要排序的数组
    :param axis:数组排序的基准
        axis=0:按行排序
        axis=1:按列排序
    :param kind:数组排序时使用的方法
        quicksort:快排
        mergesort:混排
        heapsort:堆排
    :param order:字符串或者列表,设置按照某个属性进行排序
    :return:a sorted copy of an array
"""
# 参数axis
np.sort(a, axis=0)  # 按行排序 [[1,2,3,4],[1,2,3,4]]
# 参数order
dtype = [('Name', 'S10'), ('Height', float), ('Age', int)]
values = [('Li', 1.8, 41), ('Wang', 1.9, 38), ('Duan', 1.7, 38)]
b = np.array(values, dtype=dtype)
# 按照属性Height进行排序,此时参数为字符串
np.sort(b, order='Height')  # [('Duan', 1.7, 38), ('Li', 1.8, 41),('Wang', 1.9, 38)]
# 先按照属性Age排序,如果Age相等,再按照Height排序,此时参数为列表
np.sort(b, order=['Age', 'Height'])  # [('Duan', 1.7, 38), ('Wang', 1.9, 38),('Li', 1.8, 41)]

# np.argsort(a,axis=1,kind="quicksort",order=None)
"""
    parameters和np.sort()类似
    ---------------------------
    :return:返回数组排序后的下标
"""
c1 = np.array([4, 2, 5, 7, 3])
# 返回元素排序后的下标
np.argsort(c)  # [1, 4, 0, 2, 3]
c2 = np.array([[3, 5], [5, 7]])
np.argsort(c2, axis=0)  # [[0,1],[0,1]]

# np.lexsort(a,axis=-1,kind="quicksort",order=None)
c2 = np.array([[6, 5], [9, 7]])
c3 = np.array([3, 3, 5, 2, 4])
np.lexsort((c3, c))  # [1 4 2 0 3]#先按照c的元素进行排序,若c元素相等,再比较c3对应的元素,返回数组的下标

搜索

# argmax函数返回数组中最大值对应的下标
a = np.arange(10).reshape(3,4)
np.argmax(a)  # 9
np.nanargmax(a)  # 忽略空值Nan,返回最大值对应的下标 9
#从数组中抽出元素
np.argwhere(a < 4)  # 搜索指定值 [[0 0][0 1][0 2][0 3][0 4]]
np.extract((a % 2) == 0, a)  # [0 2 4 6 8]

猜你喜欢

转载自blog.csdn.net/qq_35511580/article/details/81296686