2011-03-18 49 views
8

में सभी तत्वों के उत्पाद प्राप्त कर सकते हैं मैं एक एक आयामी NumPy सरणी है:कैसे मैं एक एक आयामी numpy सरणी

a = numpy.array([2,3,3]) 

मैं सभी तत्वों, 18 इस मामले में की उत्पाद है करना चाहते हैं।

एक ही रास्ता है कि मैं इस किया जाएगा करने के लिए मिल सकता है:

b = reduce(lambda x,y: x*y, a) 

कौन सा सुंदर लग रहा है, लेकिन बहुत तेजी से नहीं है (मैं इस एक बहुत सब करने की ज़रूरत)।

क्या कोई ऐसी विधि है जो यह करती है? यदि नहीं, तो ऐसा करने का सबसे प्रभावी तरीका क्या है? मेरे असली दुनिया के सरणी में 39 फ्लोट तत्व हैं।

उत्तर

13

NumPy में आप की कोशिश कर सकते हैं:

numpy.prod(a) 

एक बड़ा सरणी numpy.arange(1,40)/10. के लिए:

array([ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1, 
     1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2, 
     2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2, 3.3, 
     3.4, 3.5, 3.6, 3.7, 3.8, 3.9]) 

अपने reduce(lambda x,y: x*y, a) जरूरतों 24.2μs,

numpy.prod(a) जरूरतों 3.9μs।

संपादित करें:a.prod() 2.67μs की आवश्यकता है। जेएफ सेबेस्टियन के लिए धन्यवाद!

+0

ए, numpy.prod(), कि मैं क्या खोज रहा था है। धन्यवाद! –

+5

['a.prod()' 'np.prod (ए)'] से थोड़ा तेज है (https://gist.github.com/875795) – jfs

0

या अगर संख्यात्मक सटीकता की हानि एक समस्या नहीं है, हम कर सकते हैं

>>> numpy.exp(numpy.sum(numpy.log(a))) 
17.999999999999996 

>>> numpy.prod(a) 
18 
+0

'numpy.sum' का उपयोग क्यों नहीं करें? – MSeifert

+0

@MSeifert धन्यवाद 'numpy.sum' बेहतर होगा, मैं बस कुछ पात्रों को बचाने के लिए था: पी – dontloo

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