Как я могу получить произведение всех элементов в одномерном массиве - PullRequest
8 голосов
/ 18 марта 2011

У меня есть одномерный массив NumPy:

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

Я бы хотел получить произведение всех элементов, в данном случае 18.

Единственный способ, которым я мог бы найти это, был бы:

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

Это выглядит красиво, но не очень быстро (мне нужно много делать).

Есть какой-нибудь тупой метод, который делает это? Если нет, каков наиболее эффективный способ сделать это? В моих массивах реального мира 39 элементов с плавающей точкой.

Ответы [ 2 ]

13 голосов
/ 18 марта 2011

В 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 мкс,

numpy.prod(a) необходимо 3,9 мкс.

РЕДАКТИРОВАТЬ: a.prod() необходимо 2,67 мкс. Спасибо Дж.Ф. Себастьяну!

0 голосов
/ 14 сентября 2016

Или, если потеря числовой точности не является проблемой, мы можем сделать

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

>>> numpy.prod(a)
18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...