2016-01-07 10 views
37

, this post और this other post पढ़ने के बावजूद मुझे numpy.where() को ठीक से समझने में समस्या है।numpy.where() विस्तृत, चरण-दर-चरण स्पष्टीकरण/उदाहरण

क्या कोई व्यक्ति 1 डी और 2 डी सरणी के साथ चरण-दर-चरण टिप्पणी वाले उदाहरण प्रदान कर सकता है?

+3

कृपया के बारे में * * आप समझ में नहीं आता क्या सटीक होना। निश्चित रूप से आप नहीं चाहते हैं कि हम दस्तावेज़ों से सबकुछ दोहराएं। – timgeb

+9

मुझे नहीं पता कि लोग इस तरह के प्रश्नों से नाराज क्यों हो जाते हैं और उन्हें बंद करते हैं। लेकिन यह जानिए, इससे कई लोगों की मदद मिली। – deadcode

उत्तर

79

थोड़ी देर के लिए झुकाव के बाद, मैंने चीजों को समझ लिया, और उम्मीद कर रहा हूं कि यह दूसरों की मदद करेगा।

सहजता से, np.where पूछने की तरह है "मुझे बताएं कि इस सरणी में, प्रविष्टियां किसी दिए गए शर्त को" संतुष्ट करती हैं।

>>> a = np.arange(5,10) 
>>> np.where(a < 8)  # tell me where in a, entries are < 8 
(array([0, 1, 2]),)  # answer: entries indexed by 0, 1, 2 

यह भी सरणी में प्रविष्टियों शर्त पूरी नहीं प्राप्त करने के लिए इस्तेमाल किया जा सकता:

>>> a[np.where(a < 8)] 
array([5, 6, 7])   # selects from a entries 0, 1, 2 

जब एक एक 2d सरणी है, np.where() पंक्ति IDX के की एक सरणी देता है, और एक सरणी col की IDX की:

>>> a = np.arange(4,10).reshape(2,3) 
array([[4, 5, 6], 
     [7, 8, 9]]) 
>>> np.where(a > 8) 
(array(1), array(2)) 

ताकि 1d मामले में, हम np.where() टी का उपयोग कर सकते ओ 2 डी सरणी में प्रविष्टियों शर्त पूरी नहीं मिलती है:

>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2 

सरणी ([9])


ध्यान दें, जब a 1 दिन है, np.where() अभी भी पंक्ति IDX की और एक सरणी की एक सरणी देता है कॉल idx के लेकिन कॉलम लंबाई 1 के हैं, तो बाद में खाली सरणी है।

+3

मैं एनपी को समझने पर संघर्ष कर रहा था। जहां 2 डी पर इस्तेमाल किया गया जब तक मुझे आपका जवाब नहीं मिला "जब एक 2 डी सरणी है, np.where() पंक्ति idx की एक सरणी देता है, और col idx की एक सरणी देता है:"। उसके लिए धन्यवाद। –

+0

धन्यवाद अलेक्जेंड्रे। आपकी टिप्पणियों में मदद मिली, मैं भी समझने के साथ संघर्ष कर रहा था। – anonnoir

+0

मैं डॉक्टर को तीन बार पढ़ने के बाद बहुत बेवकूफ महसूस कर रहा था और अभी भी पहेली को हल नहीं कर रहा हूं 'np.where (2d_array)', इसे साफ़ करने के लिए धन्यवाद! आपको अपना जवाब स्वीकार करना चाहिए। ई: ओह, यह बंद है। अच्छा, यह नहीं होना चाहिए – speedymcs

1

यहां थोड़ा और मजेदार है। मैंने पाया है कि अक्सर NumPy वही करता है जो मैं चाहता हूं कि यह करे - कभी-कभी मेरे लिए दस्तावेज़ों को पढ़ने की तुलना में चीजों को आजमाएं। असल में दोनों का मिश्रण सबसे अच्छा है।

मुझे लगता है कि आपका उत्तर ठीक है (और यदि आप चाहें तो इसे स्वीकार करना ठीक है)। यह सिर्फ "अतिरिक्त" है।

import numpy as np 

a = np.arange(4,10).reshape(2,3) 

wh = np.where(a>7) 
gt = a>7 
x = np.where(gt) 

print "wh: ", wh 
print "gt: ", gt 
print "x: ", x 

देता है:

wh: (array([1, 1]), array([1, 2])) 
gt: [[False False False] 
     [False True True]] 
x: (array([1, 1]), array([1, 2])) 

... लेकिन:

print "a[wh]: ", a[wh] 
print "a[gt] ", a[gt] 
print "a[x]: ", a[x] 

देता है:

a[wh]: [8 9] 
a[gt] [8 9] 
a[x]: [8 9] 
संबंधित मुद्दे