Numpy 排序和使用索引

# 导包
import numpy as np

排序 

.sort() 

x = np.arange(16)   # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
# 随机打乱顺序,且x顺序改变
np.random.shuffle(x)  # array([13,  2,  6,  7, 11, 10,  3,  4,  8,  0,  5,  1,  9, 14, 12, 15])
np.sort(x)
x   # array([13,  2,  6,  7, 11, 10,  3,  4,  8,  0,  5,  1,  9, 14, 12, 15])
x.sort() 
x   # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

 

X = np.random.randint(10, size=(4,4)) 
# 每列按大小排序
np.sort(X, axis=0) 
# 每行按大小排序
np.sort(X, axis=1) 

使用索引 

.argsort()

x = np.arange(16)
np.random.shuffle(x) 
x  # array([ 5, 13,  0, 10,  2, 14,  1,  3, 11,  8, 12,  9,  7,  4,  6, 15])
np.argsort(x)   # array([ 2,  6,  4,  7, 13,  0, 14, 12,  9, 11,  3,  8, 10,  1,  5, 15],dtype=int64)
"""
所得结果为打乱后数据从小到大排列的索引
"""

.partition()

np.partition(x, 7)  # array([ 1,  3,  0,  4,  2,  5,  6,  7,  8, 12, 13,  9, 11, 10, 14, 15])
"""
np.partition(x,7)   # 表示数组 x 中第 7 小的元素位于排序完成数组 x 的第 7 个位置上
             然后小于该元素的位于该元素左边,大于该元素的位于右边,
             左右两边没有特别的排序要求,只要求左边小于该元素,右边大于该元素即可
"""

.argpartition()

#返回的是排序完成的元素索引数组
np.argpartition(x, 7)  

 

np.random.seed(10)
X = np.random.randint(10, size=(4,4)) 
"""
array([[9, 4, 0, 1],
       [9, 0, 1, 8],
       [9, 0, 8, 6],
       [4, 3, 0, 4]])
"""

np.argsort(X, axis=1) 
"""
array([[2, 3, 1, 0],
       [1, 2, 3, 0],
       [1, 3, 2, 0],
       [2, 1, 0, 3]], dtype=int64)
"""

np.argpartition(X, 2, axis=1) 
"""
array([[2, 3, 1, 0],
       [1, 2, 3, 0],
       [1, 3, 2, 0],
       [2, 1, 0, 3]], dtype=int64)
"""

 

posted @ 2019-11-08 15:57  一心取信  阅读(5082)  评论(0编辑  收藏  举报