Заполните пустой массив до позиции на основе другого массива - PullRequest
0 голосов
/ 04 сентября 2018
    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 формы (100, 2, 4), где 100 можно считать соответствующим времени, а 2, 4 - количество строк и столбцов соответственно Для заполнения arr_final я хочу использовать следующую логику:

  1. Для каждой ячейки сетки в arr_final ищите значение в соответствующей позиции в arr_keys, давайте назовем его val_alpha

  2. Заполните arr_final, используя значения от arr_rand1 до позиции val_alpha и используя значения от arr_rand2 после этого

Это можно сделать с помощью цикла for, но есть ли более питоническое решение?

- EDIT:

Вот цикл for soln:

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 голосов
/ 04 сентября 2018

Мы могли бы использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...