问题描述
我正在寻找一个能够有效评估的numpy
函数(或来自任何其他软件包的函数)
f是向量值输入x的向量值函数。 该产品被认为是一个简单的组件乘法。
这里的问题是每个x向量的长度和要乘以( N )的结果向量的总数( f的x )非常大,大约为数百万。
因此,不可能一次产生所有结果(它不适合存储器),然后使用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
是一个向量值函数,其输出维数等于其输入的维数。
可以肯定的是:我不是在寻找等效的代码,而是为了一个高度优化的功能。 有这样的事吗?
对于熟悉Wolfram Mathematica的人 :它将等同于 。
在Mathematica中 ,我可以简单地编写Product[f[i ConstantArray[1,1000000]],{i,1000000}]
。
1楼
Numpy 都有一个方法。 是一个 。 所以这是一个单行:
np.multiply.reduce(v)
其中v
是您希望以同样有效的方式计算的值的向量。
要计算向量,只需将函数应用于输入:
v = f(x)
以你的例子为例:
np.multiply.reduce(np.sin(x))
替代
是一种更简单的表达相同内容的 :
np.prod(v)
您也可以直接在矢量上使用方法:
v.prod()