اذهب إلى المحتوى

السؤال

نشر

لماذا يعطي 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 وكيفية عملها؟

Recommended Posts

  • 0
نشر (معدل)

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

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

  • 2 هو مؤشر 0.0
  • 3 هو مؤشر 0.1
  • 1 هو مؤشر 1.41
  • 0 هو مؤشر 1.48
تم التعديل في بواسطة Walid K
  • 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]]
"""

ويمكنك استخدامها للتريب التنازلي أيضاً وتجد ذلك في الرابط التالي:

 

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...