numpy.where () विस्तृत, चरण-दर-चरण स्पष्टीकरण / उदाहरण [बंद]


168

मुझे डॉक , इस पोस्ट और इस अन्य पोस्ट कोnumpy.where() पढ़ने के बावजूद ठीक से समझने में परेशानी है ।

क्या कोई 1D और 2D सरणियों के साथ चरण-दर-चरण टिप्पणी उदाहरण प्रस्तुत कर सकता है?

जवाबों:


271

थोड़ी देर तक इधर-उधर फुदकने के बाद, मैंने चीजों का पता लगाया, और उन्हें यहाँ पोस्ट कर रहा हूँ उम्मीद है कि यह दूसरों की मदद करेगा।

सहज रूप से, 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

जब a2d सरणी होती है, तो 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()2d सरणी में प्रविष्टियाँ प्राप्त करने के लिए उपयोग कर सकते हैं जो शर्त को पूरा करती हैं:

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

सरणी ([9])


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


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

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

5
यह शर्म की बात है कि यह बंद हो गया। हालाँकि मैं इस की एक और विशेषता जोड़ना चाहूंगा np.whereअन्यथा पूर्ण उत्तर। फ़ंक्शन भी स्थिति के आधार पर x और y सरणी से तत्वों का चयन कर सकता है। इस टिप्पणी में सीमित स्थान लेकिन देखें: np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))वापस आ जाएगी array([[4, 8, 6], [9, 2, 1]])। ध्यान दें कि x और y के कौन से तत्व
piccolo

इस उत्तर में दी गई व्याख्या केवल np.where का एक विशेष मामला है। प्रलेखन के अनुसार, जब केवल conditionप्रदान किया जाता है, तो यह फ़ंक्शन शॉर्टहैंड है np.asarray(condition).nonzero()
लेनी

19

यहाँ थोड़ा और मज़ा है। मैंने पाया है कि बहुत बार 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]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.