Есть ли эффективная функция для расчета продукта? - PullRequest
0 голосов
/ 16 сентября 2018

Я ищу функцию numpy (или функцию из любого другого пакета), которая эффективно оценила бы

enter image description here

, где f является вектор-функцией входного вектора x . Продукт считается простым компонентным умножением.

Проблема здесь в том, что нужно умножить как длину каждого x вектора, так и общее число векторов результата ( f из x ) ( N ) очень большой, порядка миллионов. Следовательно, невозможно сгенерировать все результаты одновременно (они не поместятся в память), а затем умножить их впоследствии, используя np.multiply.reduce или тому подобное.

A игрушечный пример типа кода, который я хотел бы заменить:

import numpy as np

x = np.ones(1000000)
prod = f(x)
for i in range(2, 1000000):
    prod *= f(i * np.ones(1000000))

с f вектор-функцией с размерностью ее вывода, равной размерности ее входа.

Чтобы быть уверенным: я ищу не эквивалентный код, а одну высоко оптимизированную функцию. Есть ли такая вещь?

Для тех, кто знаком с Wolfram Mathematica : Это будет эквивалент Product . В Mathematica я мог бы просто написать Product[f[i ConstantArray[1,1000000]],{i,1000000}].

1 Ответ

0 голосов
/ 16 сентября 2018

Numpy ufuncs у всех есть метод reduce.np.multiply - это уфунк.Таким образом, это одна строка:

np.multiply.reduce(v)

Где v - вектор значений, которые вы вычисляете, что, как мы надеемся, одинаково эффективно.

Чтобы вычислить вектор, просто примените вашфункция для ввода:

v = f(x)

Итак, с вашим примером:

np.multiply.reduce(np.sin(x))

Альтернатива

Более простой способ выразить то же самоеnp.prod:

np.prod(v)

Вы также можете использовать метод prod прямо на вашем векторе:

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