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

السؤال

نشر

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...