如何在一维numpy数组中获得所有元素的乘积

时间:2011-03-18 08:25:42

标签: python numpy

我有一个NumPy数组:

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

我希望拥有所有元素的产品,在这种情况下为18。

我能找到的唯一方法是:

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

看起来很漂亮,但速度不是很快(我需要做很多事情)。

是否有一个numpy方法可以做到这一点?如果没有,最有效的方法是什么?我的真实世界数组有39个浮点元素。

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分:0)

或者如果数值精度的损失不是问题,我们可以做到

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

>>> numpy.prod(a)
18