有计算产品的有效函数吗?

时间:2018-09-15 21:52:15

标签: python numpy

我正在寻找可以有效评估的numpy函数(或任何其他软件包中的函数)

enter image description here

,其中 f 是向量值输入 x 的向量值函数。乘积被认为是简单的按分量乘法。

这里的问题是每个 x 向量的长度和结果向量的总数( x f )都是相乘( N )非常大,约为数百万。因此,不可能一次生成所有结果(它不适合存储在内存中),然后再使用np.multiply.reduce等将它们相乘。

我要替换的代码类型的玩具示例是:

import numpy as np

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

使用f一个向量值函数,其输出维等于其输入维。

请确保:我不是在寻找等效的代码,而是在寻找一个高度优化的功能。有这样的事吗?

对于那些熟悉的人:这相当于Product。在 Mathematica 中,我可以简单地编写Product[f[i ConstantArray[1,1000000]],{i,1000000}]

1 个答案:

答案 0 :(得分:4)

Numpy ufuncs都具有reduce方法。 np.multiply是一个ufunc。所以这是单线的:

np.multiply.reduce(v)

v是您以同样有效的方式计算值的向量。

要计算向量,只需将函数应用于输入:

v = f(x)

以您的示例为例:

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

替代

表达同一件事的简单方法是np.prod

np.prod(v)

您也可以直接在向量上使用prod方法:

v.prod()