1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python 求组合数最快方法_快速计算投资组合波动率的方法

python 求组合数最快方法_快速计算投资组合波动率的方法

时间:2023-05-08 12:39:57

相关推荐

python 求组合数最快方法_快速计算投资组合波动率的方法

我正在编写一个numba函数来计算投资组合的波动性:

我使用的一些函数如下:import numba as nb

import numpy as np

def portfolio_s2( cv, weights ):

""" Calculate the variance of a portfolio """

return weights.dot( cv ).dot( weights )

@nb.jit( nopython=True )

def portfolio_s2c( cv, weights ):

s0 = 0.0

for i in range( weights.shape[0]-1 ):

wi = weights[i]

s0 += cv[i,i]*wi*wi

s1 = 0.0

for j in range( i+1, weights.shape[0] ):

s1 += wi*weights[j]*cv[i,j]

s0 += 2.0*s1

i = weights.shape[0]-1

wi = weights[ i ]

s0 += cv[i,i]*wi**2

return s0

@nb.jit( nopython=True )

def portfolio_s2b( cv, weights ):

s0 = 0.0

for i in range( weights.shape[0] ):

s0 += weights[i]*weights[i]*cv[i,i]

s1 = 0.0

for i in range( weights.shape[0]-1 ):

s2 = 0.0

for j in range( i+1, weights.shape[0] ):

s2 += weights[j]*cv[i,j]

s1+= weights[i]*s2

return s0+2.0*s1

我使用以下代码测试函数的性能:

^{pr2}$

这是计时器类:import time

class Timer( object ):

def __init__(self, name=''):

self._name = name

def __enter__(self):

self.start = time.time()

return self

def __exit__(self,a,b,c):

self.end = time.time()

self.timetaken = self.end-self.start

print( '{0} Took {1} seconds'.format( self._name, self.timetaken ))

结果如下:

结果表明:numba版本的函数在矩阵大小小于80的情况下优于numpy版本

numba版本的规模似乎比numpy功能更糟糕

为什么会这样?与打给numpa相比,呼叫numpy是否有某种开销?在

为什么numpy函数的伸缩性更好?它是在后台用BLAS做一些花哨的事情,还是用一种更高级的算法进行计算?在

我可以做numba函数和numpy函数吗?在

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。