Python中N个资产组合的投资组合方差

Python中N个资产组合的投资组合方差,python,arrays,numpy,portfolio,variance,Python,Arrays,Numpy,Portfolio,Variance,投资组合差异计算如下: port_var = W'_p * S * W_p 对于资产为N的投资组合,其中 W'_p = transpose of vector of weights of stocks in portfolios S = sample covariance matrix W_p = vector of weights of stocks in portfolios 我有以下numpy矩阵 投资组合中股票权重的数组(向量)(共有10只股票): 股票收益的协方差矩阵: covar

投资组合差异计算如下:

port_var = W'_p * S * W_p
对于资产为N的投资组合,其中

W'_p = transpose of vector of weights of stocks in portfolios
S = sample covariance matrix
W_p = vector of weights of stocks in portfolios
我有以下numpy矩阵

投资组合中股票权重的数组(向量)(共有10只股票):

股票收益的协方差矩阵:

covar = np.array([[ 0.00154474  0.00079555  0.00099691  0.00052596  0.0005363   0.00062005
0.00064031  0.00037494  0.00018826  0.00132809],
[ 0.00079555  0.00287429  0.00058536  0.00091774  0.00046885  0.00110434
0.00137141  0.00046724  0.00030414  0.0016615 ],
[ 0.00099691  0.00058536  0.00155757  0.00056336  0.00052395  0.00060104
0.00057223  0.00021365  0.00017057  0.00130247],
[ 0.00052596  0.00091774  0.00056336  0.00126312  0.00031941  0.00088137
0.00024493  0.00025136  0.00011519  0.00135475],
[ 0.0005363   0.00046885  0.00052395  0.00031941  0.00054093  0.00045649
0.00042927  0.00021928  0.00016835  0.00093471],
[ 0.00062005  0.00110434  0.00060104  0.00088137  0.00045649  0.00133081
0.00060353  0.0003967   0.00024983  0.00168281],
[ 0.00064031  0.00137141  0.00057223  0.00024493  0.00042927  0.00060353
0.00468731  0.00059557  0.00020384  0.00078669],
[ 0.00037494  0.00046724  0.00021365  0.00025136  0.00021928  0.0003967
0.00059557  0.00082333  0.00017191  0.00066816],
[ 0.00018826  0.00030414  0.00017057  0.00011519  0.00016835  0.00024983
0.00020384  0.00017191  0.00036348  0.0004505 ],
[ 0.00132809  0.0016615   0.00130247  0.00135475  0.00093471  0.00168281
0.00078669  0.00066816  0.0004505   0.00530036]])
当我计算时

weights.T * covar * weights
结果是一个与covar大小相同的数组。我不熟悉投资组合理论,但我认为投资组合的方差应该是一个标量(单一值)

有没有人有这方面的经验可能会有所帮助

np.dot(weights.T,np.dot(covar,weights))
# array([[ 0.00064654]])
对于2D numpy数组,
np.dot
相当于矩阵乘法

对于以1D数组为点的2D数组np,
np.dot
相当于矩阵向量乘法

对于一维阵列,
np.dot
相当于内积

对于numpy数组,
*
执行元素乘法(如果需要,使用)



或者,如果您将
covar
转换为
np.matrix
,则
*
相当于矩阵乘法。

@strimp099-作为旁注,对于较新版本的numpy(>=1.5,我想?)
dot
也是一种标准方法。换句话说,您可以将unutbu示例中的第一个示例写成
weights.T.dot(covar.dot(weights))
。对于某些东西来说,这种风格有点干净,尽管向后兼容程度较低。
np.dot(weights.T,np.dot(covar,weights))
# array([[ 0.00064654]])
weights.T*np.matrix(covar)*weights
#matrix([[ 0.00064654]])