Заполните массив numpy путем индексации с помощью двумерного массива - PullRequest
1 голос
/ 19 февраля 2020

У меня есть массив 2d numpy нулей subbins и массив индексов 2d numpy combos. Например,

p = 4
combos = np.asarray(list(itertools.combinations(range(p),3)))
subbins = np.zeros(shape=(len(combos),p))

Массивы выглядят следующим образом

combos = [[0 1 2]
 [0 1 3]
 [0 2 3]
 [1 2 3]]
subbins = [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

Как использовать combos для индексации в subbins и присвоения значений без итерации - как pythoni c как можно? Т.е. вывод, который я хочу, это:

output = [[1. 1. 1. 0.]
 [1. 1. 0. 1.]
 [1. 0. 1. 1.]
 [0. 1. 1. 1.]]

1 Ответ

2 голосов
/ 19 февраля 2020

Мы можем использовать np.put_along_axis:

np.put_along_axis(subbins, combos, 1, axis=1)

print(subbins)
array([[1., 1., 1., 0.],
       [1., 1., 0., 1.],
       [1., 0., 1., 1.],
       [0., 1., 1., 1.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...