我有一个向量,并希望制作另一个相同长度的向量,其第 k 个分量是
问题是:我们如何将其矢量化以提高速度?NumPy vectorize() 实际上是一个for循环,所以不算。
Veedrac 指出“如果不多次调用它,就无法将纯 Python 函数应用于 NumPy 数组的每个元素”。由于我使用的是 NumPy 函数而不是“纯 Python”函数,我想可以进行矢量化,但我不知道如何。
import numpy as np
from scipy.integrate import quad
ws = 2 * np.random.random(10) - 1
n = len(ws)
integrals = np.empty(n)
def f(x, w):
if w < 0: return np.abs(x * w)
else: return np.exp(x) * w
def temp(x): return np.array([f(x, w) for w in ws]).sum()
def integrand(x, w): return f(x, w) * np.log(temp(x))
## Python for loop
for k in range(n):
integrals[k] = quad(integrand, -1, 1, args = ws[k])[0]
## NumPy vectorize
integrals = np.vectorize(quad)(integrand, -1, 1, args = ws)[0]
附带说明一下,Cython for 循环是否总是比 NumPy 向量化更快?