Argsort рдлрд╝рдВрдХреНрд╢рди рдЯреВрдЯрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП argsort [0, 1] рд╕рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдкрдВрдХреНрддрд┐рдпреЛрдВ [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 рдЧрд▓рдд" рдХреЗ рд▓рд┐рдП рдпрд╣ рджреВрд╕рд░рд╛ Google рдкрд░рд┐рдгрд╛рдо рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреГрд╖реНрда рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ (рдореЗрд░реЗ рд▓рд┐рдП)ред рдореИрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╣рд╛рдБ рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗ:
x = numpy.array([1.48,1.31,0.0,0.8])
print x.argsort()
>[2 3 1 0]
рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп [3, 2, 0, 1]
рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдореЗрдВ 0рд╡рд╛рдВ рддрддреНрд╡ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдореЗрдВ рддреАрд╕рд░рд╛ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ x[np.argsort(x)]
рдЖрдкрдХреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рджреЗрдЧрд╛, рдпрд╛рдиреА [0.0, 0.8, 1.31, 1.48]
ред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд░рдЦреЗрдВ, [2 3 1 0]
рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдХрд╛ 0рд╡рд╛рдВ рддрддреНрд╡ рдЕрдирд╕реЛрд▓реНрдб рдРрд░реЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡ рд╣реИред
рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ [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))
. рдХреЗ рд░реВрдк рдореЗрдВ numpy рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ@rossbar , @bjnath : рд╢рд╛рдпрдж рдЙрдкрд░реЛрдХреНрдд @ghost рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рд╛рдорд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдореИрдВрдиреЗ рднреНрд░рдо рдХреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдХреНрд░реЙрд╕рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
"np argsort рдЧрд▓рдд" рдХреЗ рд▓рд┐рдП рдпрд╣ рджреВрд╕рд░рд╛ Google рдкрд░рд┐рдгрд╛рдо рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреГрд╖реНрда рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ (рдореЗрд░реЗ рд▓рд┐рдП)ред рдореИрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╣рд╛рдБ рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗ:
рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
[3, 2, 0, 1]
рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдореЗрдВ 0рд╡рд╛рдВ рддрддреНрд╡ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдореЗрдВ рддреАрд╕рд░рд╛ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐
x[np.argsort(x)]
рдЖрдкрдХреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рджреЗрдЧрд╛, рдпрд╛рдиреА[0.0, 0.8, 1.31, 1.48]
ред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд░рдЦреЗрдВ,[2 3 1 0]
рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдХрд╛ 0рд╡рд╛рдВ рддрддреНрд╡ рдЕрдирд╕реЛрд▓реНрдб рдРрд░реЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡ рд╣реИредрдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
[3, 2, 0, 1]
рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВрд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рдСрдл-рдмреЗрд╕ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓
x
рдореЗрдВ 3 рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрд╣реЗрдВ: