2011-03-18 62 views
8

我有一個一個維數組NumPy的:我怎樣才能得到所有元素的產品在一個維數組numpy的

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

我想有所有元素,18在這種情況下的產物。我能找到這樣做會

的唯一方法:它看起來很漂亮,但不是非常快

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

(我需要做這個有很多)。

是否有一個這樣做的numpy方法?如果不是,這樣做的最有效方法是什麼?我的真實世界數組有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。感謝J.F. Sebastian!

+0

A,numpy.prod(),這就是我正在尋找。謝謝! – 2011-03-18 08:51:55

+5

['a.prod()'比'np.prod(a)']稍快(https://gist.github.com/875795) – jfs 2011-03-18 09:05:44

0

或者,如果數值精度的損失是沒有問題的,我們能做到

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

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

爲什麼不使用'numpy.sum'? – MSeifert 2016-09-14 14:04:50

+0

@MSeifert謝謝'numpy.sum'會更好,我只是想保存一些字符:P – dontloo 2016-09-15 02:53:17

相關問題