ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
a = np.random.random ([5,5])
ind = np.argsort (a, ΠΎΡΡ = 1)
a_sorted = a [ΠΈΠ½Π΄.]
np.sort (a, ΠΎΡΡ = 1)
ΡΠ΅ΠΏΠ΅ΡΡ a_sorted ΠΈ a Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ 1-ΠΎΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π°ΠΆΠ΅ ΡΠΎΡΠΌΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ. a ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π²Π½ΠΎ (5,5), Π° a_sorted ΡΠ°Π²Π½ΠΎ (5,5,5). ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅, ΠΏΠΎΡΠ΅ΠΌΡ?
argsort()
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ.
http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΡΠΎ:
a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)
Π― Π·Π°ΠΏΡΡΠ°Π»ΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅. Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΡΡΠΌΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ:
ΠΠΎΠ·Π²ΡΠ°Ρ
index_array: ndarray, ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»
ΠΠ°ΡΡΠΈΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΠΎΡΡΠΈΡΡΡΡΠΈΡa
ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΎΡΠΈ.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ,a[index_array]
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉa
.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ 1D-ΠΌΠ°ΡΡΠΈΠ²Ρ. Π‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌ ND?
@lzkelley ΠΠ°, ΠΌΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π±Ρ ΠΏΠ°ΡΡ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
@shoyer ΠΊΡΡΡΠΎ, ΡΠ΄Π΅Π»Π°Ρ ΠΏΠΈΠ°Ρ ΠΈ
ΠΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ND.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Ρ
ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, @seberg ΠΌΠΎΠ³ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ²ΠΎΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ ΡΠ²Π½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ, ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΠΎΡΠ° ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΠΎΠ³ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅.
+1 Π·Π° Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
Π Π°Π·Π²Π΅ Π²ΡΡ ΡΠ΅Π»Ρ argsort
(Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ sort
) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ?
argsort
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΎΡΠΈ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΡΡΠΎΠΉ ΠΎΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎΠΉ. ΠΡΠ»ΠΈ Π½Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π½Π΅ Π·Π½Π°Ρ.
ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΠΎΡΠ° ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΠΎΠ³ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅.
ΠΡΠΎ # 8708
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ND.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ
a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]