让我试着解释一下我需要解决的问题。
1。)我有一个1乘34的投资组合资产权重(它们总和为1)(数组:asset_allocation)
asset_allocation = [0.03, 0.12, 0.04, ...., 0.09]
2.)我有一个34000乘242的资产回报场景矩阵(34个资产类* 1000个场景,241个列,每月数据周期,1个额外列,模拟标识符从1到1000)(数组:asset_return_scenario )
asset_return_scenario = [[1,1,..,2,2,...,1000,1000],[-0.03,...,0.015],...,[-0.12,...,0.04]]
我现在需要做的是为每个场景和每个时段计算投资组合回报。
因此,我需要获取asset_return_scenario数组的前34个元素(第1期中的34个资产返回)并将其乘以asset_allocation数组,依此类推。
因此,我的最终结果(数组:portfolio_returns)的大小应为241乘以。
现在我用两个for循环完成了这个:
在1000列上有一个for循环,在241列上有一个for循环。下面的示例代码ret_assets
只是为每次迭代从整个asset_return_scenario
矩阵中给出了一组特定的资产回报(34乘241矩阵)。这需要花费很多时间,因此我想避免for循环并用numpy方法解决我的问题。
for i in range(0,1000):
ret_assets = asset_return_scenario[asset_return_scenario['SIMULATION'] == i+1][asset_return_scenario.columns[3:]]
for j in range(0,241):
if j == 0:
portfolio_return[i,j] = 0
else:
portfolio_return[i,j] = ret_assets.iloc[:,j].dot(asset_allocation)
有什么建议吗?