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

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

Amer Abdallah

السؤال

لدي مصفوفة 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].

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

Recommended Posts

  • 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())

 

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

  • 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.

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...