Amer Abdallah نشر 16 أغسطس 2021 أرسل تقرير نشر 16 أغسطس 2021 لماذا يعطي Numpy هذه النتيجة: >>> import numpy as np >>> arr = np.array([5.51,0.0,8.7,5.4]) >>> arr.argsort() # Output: [1, 3, 0, 2] كنت أتوقع أن تكون النتيجة كالتالي: [3, 1, 2, 0] لكن من الواضح أن هناك شيء مازلت أجهله بشأن هذه الدالة، هل يمكن لأحد أن يشرح لي فائدة argsort وكيفية عملها؟ 1 اقتباس
0 Walid Kadded نشر 16 أغسطس 2021 أرسل تقرير نشر 16 أغسطس 2021 (معدل) الدالة argsort تقوم بإرجاع المؤشرات بالترتيب الذي من شأنه جعل الجدول مرتبا. في هذه الحالة: 2 هو مؤشر 0.0 3 هو مؤشر 0.1 1 هو مؤشر 1.41 0 هو مؤشر 1.48 تم التعديل في 16 أغسطس 2021 بواسطة Walid K 1 اقتباس
1 Ali Haidar Ahmad نشر 16 أغسطس 2021 أرسل تقرير نشر 16 أغسطس 2021 يتم استخدام الوظيفة لإجراء فرز غير مباشر على طول المحور المحدد باستخدام الخوارزمية المحددة له (تحدد له الخوارزمية التي ستقوم بالفرز مثل الفرز على أساس الكومة أو باستخدام مبدأ فرق تسد mergesort أو خوارزمية الفرز السريع). تقوم بإرجاع مصفوفة من الفهارس من نفس الشكل مثل arr التي من شأنها أن تفرز المصفوفة.لها الشكل التالي: numpy.argsort(arr, axis=-1, kind=’quicksort’, order=None) بحيث أن الوسيط الأول هو الصفوفة، والثاني هو المحور وإذا تم ضبطه على None ، فسيتم تسوية المصفوفة "flatten" قبل الفرز. وافتراضياً هي -1 ، أي يقوم بالفرز على أساس المحور الأخير. أما الوسيط الثالث فهو نوع الخوارزمية [‘quicksort’, ‘mergesort’, ‘heapsort’] وافتراضياً هي quicksort. أما الوسيط الأخير فيستخدم عندما تكون المصفوفة عبارة عن مصفوفة ذات حقول محددة، حيث تحدد هذه الوسيطة الحقول المراد مقارنتها أولاً ، وثانيًا ، وما إلى ذلك. وتعيد هذه الدالة مصفوفة من الفهارس التي تفرز مصفوفتك على طول المحور المحدد. أمثلة: import numpy arr = numpy.array([ 3, 5, 1, 5, 4, 1]) print (arr) # [3 5 1 5 4 1] sorted = numpy.argsort(arr) print ("Output sorted array indices : ", sorted) print("Output sorted array : ", arr[sorted]) #Output sorted array indices : [2 5 0 4 1 3] #Output sorted array : [1 1 3 4 5 5] ########################################################################## import numpy arr = numpy.array([[ 5, 6], [4, 3]]) print (arr) """ [[5 6] [4 3]] """ # هنا حددنا خوارزمية فرق تسد # حددنا أيضاً الفرز على المحور العمودي sorted = numpy.argsort(arr, kind ='mergesort', axis = 0) print ("Output sorteded array indices along axis 0: \n", sorted) """ Output sorteded array indices along axis 0: [[1 1] [0 0]] """ # هنا غيرنا بالخوارزمية والمحور sorted2 = numpy.argsort(arr, kind ='heapsort', axis = 1) print ("Output sorteded array indices along axis 1: \n", sorted2) """ Output sorteded array indices along axis 1: [[0 1] [1 0]] """ ويمكنك استخدامها للتريب التنازلي أيضاً وتجد ذلك في الرابط التالي: 1 اقتباس
0 عبدالباسط ابراهيم نشر 16 أغسطس 2021 أرسل تقرير نشر 16 أغسطس 2021 تقوم الدالة argsort بإرجاع المؤشرات المستخدمة لاحقاً في فرز المصفوفة وتكون تصاعدياً إفتراضياً عن طريق إرجاع index العنصر حسب ترتيبه عند ترتيبه تصاعدياً وفي المثال السابق الذي طرحته لماذا تتوقع ذلك الناتج لذلك قم بالإطلاع النتاج وستعرف طريقة عملها print (arr.argsort()) # Output: [2 3 1 0] الناتج السابق يعني أن ال index 2 يجب أن يكون في أول المصفوفة ويعني أيضاً أنه أصغر رقم 2 هو ال index الخاص بالعنصر 0.0 3 هو ال index الخاص بالعنصر 0.1 1 هو ال index الخاص بالعنصر 1.41 0 هو ال index الخاص بالعنصر 1.48 1 اقتباس
السؤال
Amer Abdallah
لماذا يعطي Numpy هذه النتيجة:
كنت أتوقع أن تكون النتيجة كالتالي:
لكن من الواضح أن هناك شيء مازلت أجهله بشأن هذه الدالة، هل يمكن لأحد أن يشرح لي فائدة argsort وكيفية عملها؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.