gpt4 book ai didi

python - 在 pandas/python 中加速 newton-raphson

转载 作者:行者123 更新时间:2023-11-28 17:48:25 26 4
gpt4 key购买 nike

我目前正在遍历一组非常大的数据~85GB(~600M 行)并简单地使用 newton-raphson 来计算一个新参数。截至目前,我的代码非常慢,关于如何加快速度的任何提示? BSCallClass 和 BSPutClass 中的方法是封闭形式的,因此实际上没有什么可以加速的。谢谢。

class NewtonRaphson:

def __init__(self, theObject):
self.theObject = theObject

def solve(self, Target, Start, Tolerance, maxiter=500):
y = self.theObject.Price(Start)
x = Start
i = 0
while (abs(y - Target) > Tolerance):
i += 1
d = self.theObject.Vega(x)
x += (Target - y) / d
y = self.theObject.Price(x)
if i > maxiter:
x = nan
break
return x

def main():
for row in a.iterrows():
print row[1]["X.1"]
T = (row[1]["X.7"] - row[1]["X.8"]).days
Spot = row[1]["X.2"]
Strike = row[1]["X.9"]
MktPrice = abs(row[1]["X.10"]-row[1]["X.11"])/2
CPflag = row[1]["X.6"]

if CPflag == 'call':
option = BSCallClass(0, 0, T, Spot, Strike)
elif CPflag == 'put':
option = BSPutClass(0, 0, T, Spot, Strike)

a["X.15"][row[0]] = NewtonRaphson(option).solve(MktPrice, .05, .0001)

编辑:

对于那些好奇的人,我最终通过使用 scipy 建议以及使用多处理模块显着加快了整个过程。

最佳答案

不要在 Python 中编写您自己的 Newton-Raphson 方法。使用 root finders in scipy.optimize 之一您将获得更好的性能例如brentqnewton .(据推测,如果您有 pandas,您还需要安装 scipy。)


信封背面计算:

对 brentq 进行 600M 调用应该可以在标准硬件上进行管理:

import scipy.optimize as optimize
def f(x):
return x**2 - 2

In [28]: %timeit optimize.brentq(f, 0, 10)
100000 loops, best of 3: 4.86 us per loop

因此,如果每次调用 optimize.brentq 需要 4.86 微秒,那么 600M 次调用大约需要 4.86 * 600 ~ 3000 秒~ 1 小时。


newton 可能更慢,但仍然易于管理:

def f(x):
return x**2 - 2
def fprime(x):
return 2*x

In [40]: %timeit optimize.newton(f, 10, fprime)
100000 loops, best of 3: 8.22 us per loop

关于python - 在 pandas/python 中加速 newton-raphson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com