有没有办法在 python pandas 中向量化投资组合标准偏差
Is there a way to vectorize the portfolio standard deviation in python pandas
我的目标是计算投资组合的标准差。
我生成了一个包含 23 只股票的随机加权投资组合:
X = np.random.dirichlet(np.ones(23),size=1000)
rand_port_wts = pd.DataFrame(X, columns=data.columns)
矩阵为:(1000, 23)
我生成了协方差 table:
annual_sec_std_deviation = (daily_sec_return.std()) * np.sqrt(num_trade_dys_py)
矩阵为:(23,23)
因为矩阵的形状,可以理解我得到一个值错误:
ValueError: shapes (23,23) and (1000,23) not aligned: 23 (dim 1) != 1000 (dim 0)
我能想到的解决问题的唯一方法是使用循环传递投资组合权重数据框的 1 行 (rand_port_wts):
tbl = []
for i in range(1000):
tbl.append(np.sqrt(np.dot(rand_port_wts.loc[i].T, np.dot(annual_sec_covariance, rand_port_wts.loc[i]))))
tbl
虽然这行得通,但它需要很长时间,而且也不优雅。我希望有人可以提出一些更有效的建议。
提前致谢
我不是 100% 确定,但请尝试:
portfolio_vol = rand_port_wts.apply(lambda x: np.dot(x.T, np.dot(cm, x)), axis=1)
其中 cm 是协方差矩阵
我的目标是计算投资组合的标准差。
我生成了一个包含 23 只股票的随机加权投资组合:
X = np.random.dirichlet(np.ones(23),size=1000)
rand_port_wts = pd.DataFrame(X, columns=data.columns)
矩阵为:(1000, 23)
我生成了协方差 table:
annual_sec_std_deviation = (daily_sec_return.std()) * np.sqrt(num_trade_dys_py)
矩阵为:(23,23)
因为矩阵的形状,可以理解我得到一个值错误:
ValueError: shapes (23,23) and (1000,23) not aligned: 23 (dim 1) != 1000 (dim 0)
我能想到的解决问题的唯一方法是使用循环传递投资组合权重数据框的 1 行 (rand_port_wts):
tbl = []
for i in range(1000):
tbl.append(np.sqrt(np.dot(rand_port_wts.loc[i].T, np.dot(annual_sec_covariance, rand_port_wts.loc[i]))))
tbl
虽然这行得通,但它需要很长时间,而且也不优雅。我希望有人可以提出一些更有效的建议。
提前致谢
我不是 100% 确定,但请尝试:
portfolio_vol = rand_port_wts.apply(lambda x: np.dot(x.T, np.dot(cm, x)), axis=1)
其中 cm 是协方差矩阵