मेरी एक छवि है, यह एक सरणी है। मैं न्यूनतम मूल्य के बाद मूल्य प्राप्त करना चाहता हूं, मैं चाहता हूं कि आप मुझे समझें क्योंकि मैं अंग्रेजी नहीं बोलता हूं। इस छवि के एक पिक्सेल में न्यूनतम मूल्य -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
-1
Yehadska 24 नवम्बर 2015, 18:30

2 जवाब

सबसे बढ़िया उत्तर

आप इसे इस तरह से कर सकते हैं:

import numpy as np
sorted_vec = np.unique(img.reshape(-1))
second_smallest = sorted_vec[1]
2
dslack 24 नवम्बर 2015, 15:35

बड़े सरणियों के लिए, 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 पूर्ण सरणी को सॉर्ट नहीं करता है, लेकिन बस तब तक मूल्यों को स्वैप करता है जब तक कि सभी छोटे मूल्य दिए गए इंडेक्स के बाईं ओर नहीं होते हैं, और सभी बड़े मान दाईं ओर होते हैं।

ध्यान दें कि परिणाम अलग-अलग होंगे यदि न्यूनतम मूल्य अद्वितीय नहीं है - लेकिन यह आपके प्रश्न से स्पष्ट नहीं है कि आप इस मामले में किस उत्पादन की इच्छा रखते हैं।

1
Community 23 मई 2017, 12:30