2013-04-18 11 views
33
>>> ex=np.arange(30) 
>>> e=np.reshape(ex,[3,10]) 
>>> e 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]) 
>>> e>15 
array([[False, False, False, False, False, False, False, False, False, 
     False], 
     [False, False, False, False, False, False, True, True, True, 
     True], 
     [ True, True, True, True, True, True, True, True, True, 
     True]], dtype=bool) 

मुझे लगता है कि सच है पंक्तियों या e में पंक्तियों जिसका मूल्य 15 से ज्यादा मैं का उपयोग कर पुनरावृति कर सकते हैं खोजने की जरूरत है एक पाश के लिए, तथापि, मैं अगर जानना चाहते हैं वहाँ एक तरह से numpy यह अधिक कुशलता से कर सकता है?numpy सूचकांक प्राप्त

उत्तर

39

पंक्ति की संख्या जहां कम से कम एक आइटम 15 से भी बड़ा है पाने के लिए:

>>> np.where(np.any(e>15, axis=1)) 
(array([1, 2], dtype=int64),) 
16

आप nonzero फ़ंक्शन का उपयोग कर सकते हैं। यह दिए गए इनपुट के nonzero सूचकांक देता है।

आसान तरीका

>>> (e > 15).nonzero() 

(array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 

अधिक सूचकांक को देखने के लिए क्लीनर, का उपयोग transpose विधि:

>>> numpy.transpose((e>15).nonzero()) 

[[1 6] 
[1 7] 
[1 8] 
[1 9] 
[2 0] 
... 

नहीं बुरा रास्ता

>>> numpy.nonzero(e > 15) 

(array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 

या साफ तरीका:

>>> numpy.transpose(numpy.nonzero(e > 15)) 

[[1 6] 
[1 7] 
[1 8] 
[1 9] 
[2 0] 
... 
+3

'np.nonzero()' क्या 'np.where()' का उपयोग करता है [हुड के नीचे] (https://docs.scipy.org/doc/numpy/reference/generated/numpy .where.html)। – ostrokach

+1

'np.transpose (np.where (बोर्ड == 0)) 'मेरे लिए क्या काम करता है –

संबंधित मुद्दे