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

Pet*_*mit 8 python numpy

我有一个NumPy数组:

a = numpy.array([2,3,3])
Run Code Online (Sandbox Code Playgroud)

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

我能找到的唯一方法是:

b = reduce(lambda x,y: x*y, a)
Run Code Online (Sandbox Code Playgroud)

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

是否有一个numpy方法来做到这一点?如果没有,最有效的方法是什么?我的真实世界阵列有39个浮点元素.

eum*_*iro 13

在NumPy中,您可以尝试:

numpy.prod(a)
Run Code Online (Sandbox Code Playgroud)

对于更大的阵列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])
Run Code Online (Sandbox Code Playgroud)

reduce(lambda x,y: x*y, a)需要24.2μs,

numpy.prod(a) 需要3.9μs.

编辑: a.prod()需要2.67μs.感谢JF Sebastian!

  • [`a.prod()`比`np.prod(a)`](https://gist.github.com/875795)略快 (5认同)