कहें कि मेरे पास निरंतर भिन्न कार्य के मूल्यांकन वाले न्यूमपी में एक सरणी है, और मैं स्थानीय मिनीमा ढूंढना चाहता हूं। कोई शोर नहीं है, इसलिए हर बिंदु जिसका मूल्य अपने पड़ोसियों के मूल्यों से कम है, स्थानीय न्यूनतम के लिए मेरे मानदंड को पूरा करता है।कुशलतापूर्वक NumPy में एक चिकनी multidimensional सरणी के स्थानीय minima कैसे खोजें?
import numpy as N
def local_minima(array2d):
local_minima = [ index
for index in N.ndindex(array2d.shape)
if index[0] > 0
if index[1] > 0
if index[0] < array2d.shape[0] - 1
if index[1] < array2d.shape[1] - 1
if array2d[index] < array2d[index[0] - 1, index[1] - 1]
if array2d[index] < array2d[index[0] - 1, index[1]]
if array2d[index] < array2d[index[0] - 1, index[1] + 1]
if array2d[index] < array2d[index[0], index[1] - 1]
if array2d[index] < array2d[index[0], index[1] + 1]
if array2d[index] < array2d[index[0] + 1, index[1] - 1]
if array2d[index] < array2d[index[0] + 1, index[1]]
if array2d[index] < array2d[index[0] + 1, index[1] + 1]
]
return local_minima
बहरहाल, यह काफी धीमी है:
मैं निम्न सूची समझ जो एक दो आयामी सरणी के लिए काम करता है, सीमाओं पर संभावित न्यूनतम अनदेखी की है। मैं इसे किसी भी आयाम के लिए काम करने के लिए भी प्राप्त करना चाहता हूं। उदाहरण के लिए, क्या किसी भी आयाम की किसी सरणी में किसी बिंदु के सभी पड़ोसियों को प्राप्त करने का कोई आसान तरीका है? या क्या मैं इस समस्या को गलत तरीके से पूरा कर रहा हूं? क्या मुझे इसके बजाय numpy.gradient()
का उपयोग करना चाहिए?
वैश्विक अधिकतमता ढूँढना: http://stackoverflow.com/questions/3584243/python-get-the-position-of-the-biggest-item-in-an-numpy-array/3584260#3584260 – endolith