मेरी एक छवि है, यह एक सरणी है। मैं न्यूनतम मूल्य के बाद मूल्य प्राप्त करना चाहता हूं, मैं चाहता हूं कि आप मुझे समझें क्योंकि मैं अंग्रेजी नहीं बोलता हूं। इस छवि के एक पिक्सेल में न्यूनतम मूल्य -3.40282e + 38 है। मैं मूल्य जानना चाहता हूं जो -3.40282e + 38 के बाद है।
यह उदाहरण के लिए होना चाहिए 0.3 0.4 ..
मैंने image.min () के साथ कोशिश की, लेकिन यह -3.40282e + 38 प्रिंट करता है। मुझे इसके अगले मूल्य की आवश्यकता है।
मैंने भी कोशिश की
minimo = img.min()
for i in range(rows):
for j in range(cols):
for k in img[i,j]:
if k> minimo:
print k.min()
लेकिन मुझे यह त्रुटि मिली
TypeError: 'numpy.float32' object is not iterable
2 जवाब
आप इसे इस तरह से कर सकते हैं:
import numpy as np
sorted_vec = np.unique(img.reshape(-1))
second_smallest = sorted_vec[1]
बड़े सरणियों के लिए, np.partition
का उपयोग करना सरणी को छांटने से ज्यादा तेज होगा, जैसा कि @ dslack के उत्तर में है:
import numpy as np
img = np.random.rand(1000, 1000)
# Compute via a full sort
np.unique(img.ravel())[1]
# 3.25658401967e-06
# Compute via a partition
np.partition(img.ravel(), 1)[1]
# 3.25658401967e-06
दो विधियां समान परिणाम देती हैं, और हम देख सकते हैं कि विभाजन दृष्टिकोण काफी तेज है:
%timeit np.unique(img.ravel())[1]
# 10 loops, best of 3: 86.8 ms per loop
%timeit np.partition(img.ravel(), 1)[1]
# 100 loops, best of 3: 4.99 ms per loop
गति का कारण यह है कि partition
पूर्ण सरणी को सॉर्ट नहीं करता है, लेकिन बस तब तक मूल्यों को स्वैप करता है जब तक कि सभी छोटे मूल्य दिए गए इंडेक्स के बाईं ओर नहीं होते हैं, और सभी बड़े मान दाईं ओर होते हैं।
ध्यान दें कि परिणाम अलग-अलग होंगे यदि न्यूनतम मूल्य अद्वितीय नहीं है - लेकिन यह आपके प्रश्न से स्पष्ट नहीं है कि आप इस मामले में किस उत्पादन की इच्छा रखते हैं।
संबंधित सवाल
नए सवाल
arrays
एक सरणी एक आदेशित रैखिक डेटा संरचना है जिसमें तत्वों (मूल्यों, चर, या संदर्भों) का एक संग्रह होता है, प्रत्येक को एक या अधिक अनुक्रमित द्वारा पहचाना जाता है। जब सरणियों के विशिष्ट प्रकारों के बारे में पूछा जाता है, तो इसके बजाय इन संबंधित टैगों का उपयोग करें: [वेक्टर], [सरणी सूची], [मैट्रिक्स]। इस टैग का उपयोग करते समय, एक सवाल जो प्रोग्रामिंग भाषा के लिए विशिष्ट होता है, उस प्रश्न को उस प्रोग्रामिंग भाषा के साथ टैग करें जिसका उपयोग किया जा रहा है।