• 0

ماذا تفعل الدالة Argsort في Numpy؟

لماذا يعطي 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 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يتم استخدام الوظيفة لإجراء فرز غير مباشر على طول المحور المحدد باستخدام الخوارزمية المحددة له (تحدد له الخوارزمية التي ستقوم بالفرز مثل الفرز على أساس الكومة أو باستخدام مبدأ فرق تسد 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

الدالة argsort تقوم بإرجاع المؤشرات بالترتيب الذي من شأنه جعل الجدول مرتبا.

في هذه الحالة:

  • 2 هو مؤشر 0.0
  • 3 هو مؤشر 0.1
  • 1 هو مؤشر 1.41
  • 0 هو مؤشر 1.48
تمّ تعديل بواسطة Walid K
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

تقوم الدالة 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 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن