Numpy: argsort لا يعمل مع المصفوفات متعددة الأبعاد

تم إنشاؤها على ١٩ مايو ٢٠١٤  ·  12تعليقات  ·  مصدر: numpy/numpy

ضع في اعتبارك الكود التالي:
أ = 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). إذا كان هذا هو السلوك المقصود ، فهل يمكن لأحد أن يخبرني لماذا؟

التعليق الأكثر فائدة

سيكون من الجيد إذا كان هناك مثال على كيفية استخدام الإخراج بالفعل لفرز مجموعة 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 ، 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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات