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

时间:2016-09-08 13:47:46

标签: python arrays numpy vectorization

让我试着解释一下我需要解决的问题。

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)

有什么建议吗?

0 个答案:

没有答案