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

إيجاد القيمة العظمى/الصغرى المحلية في مصفوفة Numpy

Fahmy Mostafa

السؤال

أريد دالة نمطية من numpy يمكنها العثور على القيمة العظمى/الصغرى المحلية local maxima/minima في مصفوفة عددية أحادية الأبعاد، هل توجد دالة / طريقة تقوم بهذا الأمر من خلال مكتبة Numpy فقط؟

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

Recommended Posts

  • 1

يمكنك استخدام scipy.signal.argrelextrema لايجاد القيمة العظمى/الصغرى المحلية, ويمكنك فعل ذلك كالتالي, بداية القيمة العظمى

myArray = np.array([3, 5, 3, 5, 3])
maxima = signal.argrelextrema(myArray, np.greater)
print(maxima)

سوف يكون الناتج كالتالي

(array([3, 5]),)

وبالمثل للقيمة الصغرى ولكن باستخدام np.less كالتالي

minima = signal.argrelextrema(myArray, np.less)

print(minima)

 

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

  • 1

هناك عدة طرق من بينها الطرق التي ذكرها الزملاء في الأعلى، لكن إذا أردت إيجادها باستخدام نمباي يمكنك القيام بذلك كالتالي:

import numpy as np
np.r_[True, arr[1:] < arr[:-1]] & numpy.r_[arr[:-1] < arr[1:], True]

لكن يجب أن تقوم بعملية smooth على مصفوفتك قبل ذلك باستخدام التابع convolve.
مثال عن هذا التابع:

np.convolve([1, 2, 3], [0, 1, 0.5])
#array([0. , 1. , 2.5, 4. , 1.5])

 

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

  • 0

يمكنك ذلك عن طريق إستخدام الدالة rank_filter، لاحظ البرنامج التالي و الذي يرجع True في حال كانت القيم هي عبارة عن local minima, local maxima بالمقارنة مع القيم المجاورة:

import numpy as np
from scipy.ndimage import rank_filter

def find_local_maxima(x):
   x_dilate = rank_filter(x, -1, size=3)
   return x_dilate == x

def find_local_minima(x):
   x_erode = rank_filter(x, -0, size=3)
   return x_erode == x

myArray = np.array([3, 5, 3, 5, 3])
maxima = find_local_maxima(myArray)
minima = find_local_minima(myArray)

لاحظ بعد تعريف الدوال find_local_minima, find_local_maxima قمنا بندائها و حفظ الناتج في maxima, minima وهي المصفوفات التي تحتوي على قيم true, false لأماكن ال local minima, local maxima وللقيام بإستخراج القيم نفسها يمكن المرور بfor loop على المصفوفتين و إيجاد القيم التي مواقعها تساوي true.

maxima_values = [myArray[i] for i in np.where(maxima)[0]]
minima_values = [myArray[i] for i in np.where(minima)[0]]

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...