擅长:python、mysql、java
<p>您应该尝试将求和和和与插值例程的调用矢量化。例如,像这样:</p>
<pre><code>import numpy as np
class Bond(object):
def __init__(self, years, cpn):
self.years = years
self.coupon = cpn
self.cashflows = np.zeros((self.years + 1, 2))
self.cashflows[:,0] = np.arange(self.years + 1)
self.cashflows[:,1] = self.coupon
self.cashflows[0,:] = 0, -1
self.cashflows[-1,:] = self.years, 1.0 + self.coupon
def pv(self, market):
return (self.cashflows[:,1] * market.df(self.cashflows[:,0])).sum()
</code></pre>
<p>这似乎能提高10倍的加速。您还可以用类似的方法将<code>Market</code>中的<code>knots</code>和{<cd2>}列表替换为数组。在</p>
<p>重新校准需要时间的原因是<code>leastsq</code>必须再次验证它是否真的处于局部最小值。这需要对目标函数进行数值微分,这需要时间,因为有很多自由变量。优化问题相当容易,所以只需几个步骤就可以收敛,这意味着验证最小值所需的时间几乎与解决问题所需的时间相同。在</p>