填写numpy数组到另一个数组的位置

时间:2018-09-04 18:35:36

标签: python 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))

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

  1. 对于arr_final中的每个网格单元,在arr_keys中的相应位置查找值,将其称为val_alpha

  2. 使用arr_finalarr_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]

1 个答案:

答案 0 :(得分:2)

我们可以使用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)