argsort ๊ธฐ๋ฅ์ด ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ณต๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ [0, 1]์ ๋ํ argsort๋ ์ ํํ์ง๋ง ํ [2, 3]์ ๋ํด์๋ ์๋ง์
๋๋ค.
๋ค๋ฅธ NumPy ์ค์น ๋ฐ ๋ฒ์ 1.11.0 ๋ฐ 1.12.0์์ ์ด๊ฒ์ ํ
์คํธํ์ต๋๋ค.
import numpy as np
vec = np.array([
[-1.4, -1.2, 1.3],
[-3.6, 3.9, -3.7],
[-2.3, 1.5, -2. ],
[-2.6, 2.4, -1.6]
])
In [1]: np.argsort(-vec, axis=1)
Out[1]:
array([[2, 1, 0],
[1, 0, 2],
[1, 2, 0],
[1, 2, 0]])
๊ฒฐ๊ณผ์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๊ณ vec[np.arange(4)[:, np.newaxis], np.argsort(-vec, axis=1)]
๋ฅผ ์ถ๋ ฅํ๊ณ ์ ๋ณด์ด๋์ง ํ์ธํ์ญ์์ค.
์ด๊ฒ์ "np argsort wrong"์ ๋ํ ๋ ๋ฒ์งธ Google ๊ฒฐ๊ณผ์ ๋๋ค.
๋ฌธ์ ํ์ด์ง์ ์ค๋ช ์ด (๋์๊ฒ) ๋ช ํํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์ฌ๊ธฐ์ ์ ์ค๋ช ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
x = numpy.array([1.48,1.31,0.0,0.8])
print x.argsort()
>[2 3 1 0]
์ด๋ค ์ฌ๋๋ค์ ์ด๊ฒ์ด ๋์ [3, 2, 0, 1]
๋ฅผ ์ค ๊ฒ์ด๋ผ๊ณ ์์ ํ ์ ์์ต๋๋ค. ์ฆ, ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ 3๋ฒ์งธ ์์์ฌ์ผ ํฉ๋๋ค.
์ค์ ๋ก ํ๋ ์ผ์ x[np.argsort(x)]
๊ฐ ์ ๋ ฌ๋ ๋ชฉ๋ก, ์ฆ [0.0, 0.8, 1.31, 1.48]
๋ฅผ ์ ๊ณตํ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ๋ค์ ๋งํด [2 3 1 0]
๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ 2๋ฒ์งธ ์์์์ ์๋ ค์ค๋๋ค.
[3, 2, 0, 1]
๋ฅผ ์ถ๋ ฅ์ผ๋ก ์ป์ผ๋ ค๋ฉด ๋์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
np.argsort(np.argsort(x))
>[3 2 0 1]
๋๋ x
์์ ๊ฐ์ฅ ํฐ 3๊ฐ ์์์ ์ธ๋ฑ์ค๋ง ์ํ๋ ๊ฒฝ์ฐ:
np.argsort(x)[:-4:-1]
>[0, 1, 3]
์ค์ ๋ก [3, 2, 0, 1]์ ์ถ๋ ฅ์ผ๋ก ์ป์ผ๋ ค๋ฉด ๋์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ ๋น ๋ฆ ๋๋ค.
a = np.empty(len(x), np.intp)
a[np.argsort(x)] = np.arange(len(x))
np.invert_permutation(np.argsort(x))
๋ก ์ถ๊ฐํ ๊ฒ์ ์ ์ํฉ๋๋ค.@rossbar , @bjnath : ์์ @ghost ์ ์ฝ๋ฉํธ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ์ถํ์ฌ ๋ฌธ์์ ๋ฃ์ ๊ฐ์น๊ฐ ์์ต๋๊น? ๋๋ ํผ๋์ ๋ ๋ง์ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ ๋ง์ ๊ต์ฐจ ๋งํฌ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ "np argsort wrong"์ ๋ํ ๋ ๋ฒ์งธ Google ๊ฒฐ๊ณผ์ ๋๋ค.
๋ฌธ์ ํ์ด์ง์ ์ค๋ช ์ด (๋์๊ฒ) ๋ช ํํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์ฌ๊ธฐ์ ์ ์ค๋ช ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ด๋ค ์ฌ๋๋ค์ ์ด๊ฒ์ด ๋์
[3, 2, 0, 1]
๋ฅผ ์ค ๊ฒ์ด๋ผ๊ณ ์์ ํ ์ ์์ต๋๋ค. ์ฆ, ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ 3๋ฒ์งธ ์์์ฌ์ผ ํฉ๋๋ค.์ค์ ๋ก ํ๋ ์ผ์
x[np.argsort(x)]
๊ฐ ์ ๋ ฌ๋ ๋ชฉ๋ก, ์ฆ[0.0, 0.8, 1.31, 1.48]
๋ฅผ ์ ๊ณตํ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํด[2 3 1 0]
๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ 2๋ฒ์งธ ์์์์ ์๋ ค์ค๋๋ค.[3, 2, 0, 1]
๋ฅผ ์ถ๋ ฅ์ผ๋ก ์ป์ผ๋ ค๋ฉด ๋์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.๋๋
x
์์ ๊ฐ์ฅ ํฐ 3๊ฐ ์์์ ์ธ๋ฑ์ค๋ง ์ํ๋ ๊ฒฝ์ฐ: