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
,我要使用以下逻辑:
对于arr_final
中的每个网格单元,在arr_keys
中的相应位置查找值,将其称为val_alpha
使用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]
答案 0 :(得分:2)
我们可以使用broadcasting
和boolean-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)