首页 > 解决方案 > 根据另一个数组将numpy数组填充到位置

问题描述

    import numpy as np
    arr_keys = np.array(np.mat('2 3 1 0; 3 3 3 1'))
    arr_rand1 = np.random.rand(2, 4)
    arr_rand2 = np.random.rand(2, 4)

    arr_final = np.zeros((5, 2, 4))

我想创建一个形状为 (100, 2, 4) 的名为 arr_final 的 numpy 数组,其中 100 可以认为对应于时间,2, 4 分别是行数和列数来填充arr_final,我想使用以下逻辑:

  1. 对于每个网格单元格arr_final,在相应位置查找值arr_keys,让我们调用它val_alpha

  2. arr_final使用从arr_rand1该位置开始的值填充val_alpha,并使用arr_rand2之后的值

这可以使用 for 循环来完成,但是否有更 Pythonic 的解决方案?

- 编辑:

这是for循环解决方案:

for (i, j, k), value in np.ndenumerate(arr_final):
    val_alpha = arr_keys[j][k]
    arr_final[:val_alpha, j, k] = arr_rand1[j, k]
    arr_final[val_alpha:, j, k] = arr_rand2[j, k]

标签: pythonnumpy

解决方案


我们可以利用broadcastingboolean-indexing/masking-

L = 5 # length of output array
mask = arr_keys > np.arange(L)[:,None,None]
arr_final_out = np.where(mask,arr_rand1,arr_rand2)

推荐阅读