チラ裏備忘録

情報整理

Numpy sort() argsort()

np.sort(x)

xを昇順でソートしたNumpy配列を返す.

x = np.random.randint(1, 100, size=10)
# array([93, 70, 18, 86, 85, 83, 66, 62, 19, 46])

np.sort(x)
# array([18, 19, 46, 62, 66, 70, 83, 85, 86, 93])
x.sort()の注意点

x.sort()とすると,対象は破壊的に上書きされてしまうので注意.

x.sort() # 戻り値はNone
x
# array([18, 19, 46, 62, 66, 70, 83, 85, 86, 93])

破壊的処理と非破壊的処理 | SaintSouth.NET

np.argsort(x)

xを昇順でソートした際の,インデックスを取得する.

x = np.random.randint(1, 20, size=10)
# array([10,  3, 15, 18,  6,  2, 19, 16,  9,  4])

np.argsort(x)
# array([5, 1, 9, 4, 8, 0, 2, 7, 3, 6], dtype=int64)

# こんな(非効率な)書き方もできる!
for i in np.argsort(x):
    x[i]
# 2
# 3
# 4
# 6
# 9
# 10
# 15
# 16
# 18
# 19

x.sort()と異なり,x.argsort()は非破壊で,戻り値はnp.argsort(x)と同様.

tips(降順にしたい)

argsortメソッドにNumpy配列を渡す際,-x(もしくは-1*x)とすることで降順にインデックスを取得できる.

for i in np.argsort(-x):
    x[i]
# 19
# 18
# 16
# 15
# 10
# 9
# 6
# 4
# 3
# 2