Peter Smit - 1 year ago 52

Python Question

I have a one dimensional NumPy array:

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

I would like to have the product of all elements, 18 in this case.

The only way I could find to do this would be:

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

Which looks pretty, but is not very fast (I need to do this a lot).

Is there a numpy method that does this? If not, what is the most efficient way of doing this? My real world arrays have 39 float elements.

Answer Source

In NumPy you can try:

```
numpy.prod(a)
```

For a larger array `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])
```

your `reduce(lambda x,y: x*y, a)`

needs 24.2µs,

`numpy.prod(a)`

needs 3.9µs.

**EDIT:** `a.prod()`

needs 2.67µs. Thanks to J.F. Sebastian!