ضع في اعتبارك الكود التالي:
أ = np.random.random ([5،5])
ind = np.argsort (أ ، المحور = 1)
a_sorted = a [ind]
np. الترتيب (أ ، المحور = 1)
الآن a_s Sort و 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 ، int
صفيف من الفهارس يقوم بفرز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)]