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

السؤال

نشر

أريد دالة نمطية من 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)

 

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

 

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

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...