Amer Abdallah نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 لدي كود مشابة للتالي: import numpy as np avgDists = np.array([2, 9, 7, 10, 5, 3]) ids = avgDists.argsort()[:3] print(ids) # Output: array([0, 5, 4], dtype=int64) هل من الممكن استخدام نفس دالة argsort بترتيب تنازلي للحصول على مؤشرات indices أعلى ثلاثة العناصر؟ 1 اقتباس
2 Ali Haidar Ahmad نشر 6 أغسطس 2021 أرسل تقرير نشر 6 أغسطس 2021 يمكنك استخدام الدالة numpy.flip عن طريق تمرير الدالة argsort لها حيث سترد لك ال indexes للقيم مرتبة بترتيب تنازلي بعد أن يتم فرزها تصاعدياً باستخدام argsort حيث تقوم هذه الدالة بعكس ترتيب العناصر : import numpy as np a = np.array([2, 9, 7, 10, 5, 3]) n=3 ids = np.flip(np.argsort(a)) print(ids[0:n]) #[3 1 2] نفس الفكرة باستخدام np.flipud: import numpy as np a = np.array([2, 9, 7, 10, 5, 3]) n=3 ids = np.flipud(np.argsort(a)) print(ids[0:n]) #[3 1 2] أو يمكنك القيام بعكسها بإحدى الأشكال التالية: # نضرب المصفوفة بسالب وبالتالي يصبح الأصغر أكبر وبالتالي نحصل على الفهرس المطلوب np.argsort(-1*a)[:3] #- كما ويمكن استخدام المعامل # أي بشكل مشابه للطريقة السابقة (-a).argsort()[:3] # أو بالطريقة التقليدية عن طريق أخذ آخر 3 عناصر a.argsort()[::-1][:3] وكمقارنة: %timeit np.flipud(np.argsort(a))[0:3] %timeit np.flip(np.argsort(a))[0:3] %timeit np.argsort(-1*a)[:3] %timeit (-a).argsort()[:3] %timeit a.argsort()[::-1][:3] 5.14 µs ± 211 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 5.29 µs ± 337 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 4.57 µs ± 127 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 1.97 µs ± 288 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 1.86 µs ± 251 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) # الطريقة الأخيرة أفضل 2 اقتباس
0 عبدالباسط ابراهيم نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 حتى نستطيع عكس الترتيب للتنازلي بواسطة argsort ربما نحتاج لعكس المصفوفة الناتجة من هذه الدالة ويمكننا عكسها كالتالي avgDists=np.array([1, 8, 6, 9, 4]) ids = avgDists.argsort()[::-1][:3] #لعكس المصفوفة نستخدم [::-1] ids array([3, 1, 2]) أو يمكننا تحويل القيم لقيم بالسالب import numpy as np avgDists = np.array([2, 9, 7, 10, 5, 3]) ids = (-avgDists).argsort()[:n] #(-avgDists) لاحظ print(ids) 1 اقتباس
0 Ahmed Sharshar نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 في الاصل، تستخدم argsort في ترتيب العناصر داخل مصفوفة من النوع numpy ، استخدامها بالشكل العادي يجعل الترتيب تصاعدي ، أي من الاقل للاعلى كالتالي: avgDists = np.array([1, 8, 6, 9, 4]) ids = avgDists.argsort()[:n] أما اذا اردت استخدامها بشكل تنازلي بحيث تكون اعلى القيم في البداية يمكن استخدام العلامة - لعكس الترتيب كالتالي: avgDists = np.array([1, 8, 6, 9, 4]) ids = (-avgDists).argsort()[:n] مثال أخر، أفترض ان عندنا المصفوفة التالية [3 4 7 2] لترتيب القيم بشكل تنازلي وارجاع اماكن index اعلى 3 قيم استخدام الطريقة التالية: n = 3 largest_indices = np.argsort(-1*an_array)[:n] print(largest_indices) OUTPUT [2 1 0] هنا قام بارجاع [2,1,0] وهي تمثل أماكن أعلى العناصر بالترتيب وهى [7,4,3] اقتباس
السؤال
Amer Abdallah
لدي كود مشابة للتالي:
هل من الممكن استخدام نفس دالة argsort بترتيب تنازلي للحصول على مؤشرات indices أعلى ثلاثة العناصر؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.