天天看點

np.argsort() 與 array.argsort()

兩者都是numpy的使用。

都是先排序(預設從小到大),而後傳回排序後個元素在原數組的索引。

具體使用請看一下實驗:

  1. 一維數組
>>> import numpy as np
>>> a = np.array([3,5,2,6,7])
>>> np.argsort(a, axis=0)  # 第一種方式
array([2, 0, 1, 3, 4], dtype=int64)
>>> a.argsort()  # 第二種方式
array([2, 0, 1, 3, 4], dtype=int64)
           
  1. 二維數組

    對于二維的來說,0軸可以看做是在按行方向排序,就是從上到下;

    1軸可以看做按列方向排序,就是從左到右;

    對于更高次元,就是按中括号由外到内進行編号,0,1,2……軸。

    比如這裡對以下b來說,最外層括号裡有兩個元素,分别是[3,5,1]和[2,4,9],那麼按照0軸排序就是将這兩個元素進行比對,3>2, 5>4, 1<9,

    又元素[3,5,1]的index=0;元素[2,4,9]的index=1;是以

    傳回值就是 0>1, 0>1, 0<1;由于是預設是從小到大排序;

    則傳回值就是 [1, 1, 0] 和 [0,0,1], 放到一起就是下面出現的:

array([[1, 1, 0],

[0, 0, 1]], dtype=int64)

>>> b = np.array([[3,5,1],[2,4,9]])
>>> b
array([[3, 5, 1],
       [2, 4, 9]])
>>> np.argsort(b, axis=0)  # 第一種方式 在0軸上排序
array([[1, 1, 0],
       [0, 0, 1]], dtype=int64)
>>> np.argsort(b, axis=1)  # 第一種方式 在1軸上排序
array([[2, 0, 1],
       [0, 1, 2]], dtype=int64)
>>> b.argsort()  # 第二種方式 預設輸出在1軸上的排序索引
array([[2, 0, 1],
       [0, 1, 2]], dtype=int64)
>>> b.argsort(0) # 第二種方式 指定按照0軸排序
array([[1, 1, 0],
       [0, 0, 1]], dtype=int64)
>>> b.argsort(1) # 第二種方式 指定按照1軸排序
array([[2, 0, 1],
       [0, 1, 2]], dtype=int64)