如何使用numpy.vectorize对scipy.optimize.brentq按K迭代实现向量化?
向量化scipy.optimize.brentq的一致性与性能问题
需求
通过numpy.vectorize对scipy.optimize.brentq进行向量化,迭代参数K完成计算。
现有代码
核心计算函数(调用brentq)
from scipy.optimize import brentq def fun(S, K, P, T, R, Q, Bin): def f(x): return F(1, K/S, x, T, R, Q, Bin.get(K < S)) - P[K]/S return brentq(f, 0., 10.)
辅助计算函数F
import numpy as np from scipy.stats import norm def F(S, K, x, T, R, Q, B=Bin.get(K < S)): return B * (S * np.exp(-Q * np.ones_like(K) * T) * norm.cdf(B * S/K) - np.exp(-R * np.ones_like(K) * T) * K * norm.cdf(B * S/K))
参数说明
S、K:等长numpy数组P:键为K元素值的字典T、R、Q:浮点数Bin:返回±1的字典
遇到的问题
- 单个数值传入
fun时运行正常,但直接用np.vectorize调用fun,结果与遍历K的for循环结果不一致; - 解决结果一致性问题后,
np.vectorize的运行速度并未优于for循环。
内容的提问来源于stack exchange,提问作者trmgn094
相关产品推荐
相关产品推荐

