如何在Python中利用协方差矩阵计算方差?附代码报错求助
问题分析与解决
你的第二段代码执行失败,核心原因是组合标准差的计算逻辑错误:
组合方差的正确公式是权重向量^T × 协方差矩阵 × 权重向量,你当前只计算了权重向量 × 协方差矩阵,得到的是一个向量而非标量,无法直接赋值给标准差列。同时,标准差是方差的平方根,就算算出方差也需要开根号才能得到标准差。修正后的代码:
for num in range(9): # 保留原期望收益计算逻辑,注意缩进要正确 result_table2.iloc[num]['Expected Return'] = arith_mean.dot(result_table1.iloc[num]) for num in range(9): w = result_table1.iloc[num] # 先计算组合方差 variance = w @ V.values @ w # 开平方得到标准差 result_table2.iloc[num]['Standard Deviation'] = variance ** 0.5
- 额外提示:
- 注意代码缩进,你粘贴的原代码中for循环后的语句没有缩进,实际运行会报错,第一段能正常执行大概率是粘贴时格式丢失,要确保缩进符合Python语法要求。
- 也可以用
numpy.sqrt(variance)代替variance ** 0.5,两者效果一致。
(补充数据结构说明:result_table1是9行5列的持仓权重表,每行对应一组股票权重;result_table2是结果存储表,包含期望收益和标准差列;协方差矩阵为5x5的矩阵,对应5只股票的协方差数据)
内容的提问来源于stack exchange,提问作者pupupyguy
相关产品推荐
相关产品推荐

