Numpy: argsort Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 19 мая 2014  Β·  12ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: numpy/numpy

рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:
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). Если это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ½Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π±Ρ‹ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ для сортировки массива ND.

Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π±Ρ‹ Π±Ρ‹Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‡Π΅ΠΌ a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]

ВсС 12 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ