• 0

كيفية الحصول على فهرس أقصى عنصر maximum في مصفوفة Numpy على طول محور واحد

لدي مصفوفة Numpy ثنائية الأبعاد. أعرف كيفية الحصول على القيم القصوى عبر axes:

>>> import numpy as np
>>> arr = np.array([[1, 2, 7],[4,3,1]])
>>> np.amax(arr,axis=0)
array([4, 3, 7])
>>>

كيف يمكنني الحصول على الفهرس الخاص بكل عنصر من المصفوفة الناتجة الأخيرة؟ أود أن تكون مصفوفة الإخراج ([1،1،0]) بدلاً من [4, 3, 7].

2 اشخاص أعجبوا بهذا

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


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

يمكننا استخدام np.argmax لمعرفة الفهرس الذي توجد فيه أكبر قيمة في المصفوفة كاملةً أو أكبر قيمة في كل عمود أو سطر من المصفوفة، وكل ماعلينا فعله هو تغيير المحور كما يلي:

import numpy as np    
array = np.array([[1,2,3],[4,3,1]])
print("Original array:")
print(array)
"""
[[1 2 3]
 [4 3 1]]
"""
# فهرس أكبر قيمة للمصفوقة كاملةً
# لكنه هنا يقوم بتسطيح المصفوفة وبالتالي فهرس القيمة 4 هو 3
np.argmax(array,axis=None) #3
# لكل عمود 
np.argmax(array,axis=0)
# array([1, 1, 0])
# لكل سطر
np.argmax(array,axis=1)
# array([2, 0])

كما ويمكننا استخدام التابع np.max:

import numpy as np    
array = np.array([[1,2,3],[4,3,1]])
print("Original array:")
print(array)
"""
[[1 2 3]
 [4 3 1]]
"""
# كامل المصفوفة
np.max(array, axis=None, keepdims=True)
# array([[4]])
# الأعمدة
np.max(array, axis=0, keepdims=True)
# array([[4, 3, 3]])
# الأسطر
np.max(array, axis=1, keepdims=True)
"""
array([[3],
       [4]])
"""

الآن لاحظ أن فهرس القيم العظمى التي حصلت عليها باستخدام argmax ليست الفهارس الحقيقية بالنسبة لكامل المصفوفة وإنما هي الفهرس بالنسبة للسطر أو العمود، أما إذا أردت الفهرس الحقيقي أي (عمود,سطر) تابع معي:

import numpy as np    
array = np.array([[1, 2, 7],[4,3,1]])
print("Original array:")
print(array)

result = np.where(array == np.max(array,0))
print('Tuple of arrays returned : ', result)
print('List of coordinates of maximum value in Numpy array : ')
# zip the 2 arrays to get the exact coordinates
listOfCordinates = list(zip(result[0], result[1]))
for cord in listOfCordinates:
    print(cord)
"""
Original array:
[[1 2 7]
 [4 3 1]]
Tuple of arrays returned :  (array([0, 1, 1]), array([2, 0, 1]))
List of coordinates of maximum value in Numpy array : 
(0, 2) == 7
(1, 0) == 4
(1, 1) == 3
"""

كما يمكنك استخدام التابع amax بنفس الطريقة التي استخدمنا فيها max.

1 شخص أعجب بهذا

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


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

 يمكنك استخدام دالة argmax مع المُدخل axis=0 كالآتي للحصول على الفهرس index

>>> import numpy as np
>>> arr = np.array([[1, 2, 7],[4,3,1]])
>>> a.argmax(axis=0)

array([1, 1, 0])

حيث دالة argmax() ستقوم بإرجاع أول ظهور لكل صف ، ولكن إذا احتجت عمل ذلك لمصفوفة مُشكلة فيمكنك عمل ذلك كالآتي

import numpy as np
a = np.array([[1,2,3], [4,3,1]])  # يمكن أن يكون على أي شكل
indices = np.where(a == a.max())

 

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


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

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

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

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


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

تسجيل الدخول

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


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