无for循环的矢量化numpy数组操作

2024-04-19 04:13:54 发布

您现在位置:Python中文网/ 问答频道 /正文

让我试着解释一下我需要解决的问题。你知道吗

1.)我有一个1乘34的组合资产权重向量(它们加起来等于1)(数组:资产分配)

    asset_allocation = [0.03, 0.12, 0.04, ...., 0.09]

2.)我有一个34000×242的资产回报场景矩阵(34个资产类别*1000个场景,241列有每月的数据周期,1个额外的列表示从1到1000的模拟标识符)(数组:资产回报场景)

    asset_return_scenario = [[1,1,..,2,2,...,1000,1000],[-0.03,...,0.015],...,[-0.12,...,0.04]]

我现在需要做的是计算每个场景和每个时期的投资组合回报。你知道吗

因此,我需要获取asset\u return\u场景数组的前34个元素(第1阶段中的34个asset returns),然后将其乘以asset\u allocation数组,依此类推。你知道吗

因此,我的最终结果(数组:portfolio\ u returns)的大小应该是1000乘241。你知道吗

现在我已经用两个For循环完成了这项工作:

一个for循环覆盖1000行,另一个for循环覆盖241列。在下面的示例代码中,ret_assets只给出了一组特定的资产回报(34×241矩阵),每个迭代的整个asset_return_scenario矩阵。这需要很多时间,因此我希望避免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)

有什么建议吗?你知道吗


Tags: inforreturn场景range矩阵数组资产