Как получить / установить элементы в простой матрице по нескольким индексам без цикла for? - PullRequest
0 голосов
/ 01 января 2019

Например, предположим, что у нас есть

a = zeros((5,5))

Затем я хочу установить элементы в положениях (1,2), (3,4), (0,3) как 1,2,3 соответственнов то же время, но следующее не будет работать,

# I expect this to be the same as a[(1,2)] = 1, a[(3,4)] = 2, a[(0,3)] = 3
a[[(1,2),(3,4),(0,3)]] = [1,2,3]

Он будет жаловаться на "слишком много индексов для массива".Я не хочу использовать цикл for для повышения эффективности (реальная проблема - большая матрица, и мне нужно установить или получить элементы в этой матрице с длинным списком случайно сгенерированных индексов).

1 Ответ

0 голосов
/ 01 января 2019

Вы можете сделать следующее:

import numpy as np

rows, cols = zip(*[(1, 2), (3, 4), (0, 3)])

a = np.zeros((5,5))
a[rows, cols] = [1, 2, 3]

print(a)

Вывод

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