Numpy: argsort tidak berfungsi untuk array multidimensi

Dibuat pada 19 Mei 2014  ·  12Komentar  ·  Sumber: numpy/numpy

perhatikan kode berikut:
a = np.random.random([5,5])
ind = np.argsort(a, sumbu=1)
a_sorted = a[ind]
np.sort(a, sumbu=1)

sekarang a_sorted dan a harus diurutkan di sepanjang sumbu 1. Namun bahkan bentuknya tidak identik lagi. a masih dari (5,5) sedangkan a_sorted adalah (5,5,5). Jika ini adalah perilaku yang dimaksudkan, dapatkah seseorang memberi tahu saya mengapa?

Komentar yang paling membantu

Akan lebih baik jika ada contoh bagaimana sebenarnya menggunakan output untuk mengurutkan array ND.

Akan lebih baik jika ada solusi yang lebih mudah dibaca daripada a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]

Semua 12 komentar

argsort() berfungsi dengan baik, tetapi pengindeksan tidak bekerja seperti yang Anda harapkan.

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing

Coba ini:

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)

Saya bingung dengan cara yang sama. Dokumentasi secara khusus menyatakan,

Kembali
index_array : ndarray, int
Array indeks yang mengurutkan a sepanjang sumbu yang ditentukan.
Dengan kata lain, a[index_array] menghasilkan a diurutkan.

Yang hanya berlaku untuk array 1D. Haruskah dokumentasi diperluas untuk menentukan bahwa ini tidak berlaku untuk array ND?

@lzkelley Ya, tambalan untuk meningkatkan dokumentasi akan sangat diterima.

@shoyer keren, saya akan membuat PR untuk itu dan memperbarui

Akan lebih baik jika ada contoh bagaimana sebenarnya menggunakan output untuk mengurutkan array ND.

Akan lebih baik jika ada solusi yang lebih mudah dibaca daripada a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]

Mungkin @seberg bisa menjadikannya salah satu penambahan fungsi pengindeksannya.

Saya tidak berpikir itu cocok dengan pengindeksan dengan sangat jelas, fungsi pick atau lebih mungkin merupakan kecocokan yang lebih mudah.

+1 untuk fungsi baru.

Bukankah seluruh tujuan dari argsort (seperti yang ditunjukkan pada sort ) digunakan untuk pengindeksan?

argsort menyediakan indeks untuk diurutkan di sepanjang sumbu, tetapi sebenarnya menyortir sepanjang sumbu itu menggunakan indeks tampaknya tidak perlu bertele-tele. Kecuali ada cara yang lebih sederhana yang tidak saya ketahui.

fungsi pick atau lebih mungkin merupakan kecocokan yang lebih mudah.

Ini #8708

Apakah halaman ini membantu?
0 / 5 - 0 peringkat