1. 程式人生 > >python進階—numpy進階(二)

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]