私は現在、〜85GB(〜6億行)の非常に大きなデータセットを反復処理しており、単純に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 の提案と multiprocessing モジュールを使用して、このプロセス全体を大幅に高速化しました。