Вставить значения в массив 2d NumPy - PullRequest
0 голосов
/ 03 октября 2018

Я застрял в этой простой проблеме, но не могу понять, у меня есть диагональный массив:

N = [1,2,3,4,5,6,7,8,9]
A = numpy.diag(N)

И у меня есть список индексов строк и столбцов, таких как этот:B = [[1,0], [2,1], [3,2]]

Я хочу вставить значение 1 в A, учитывая местоположение из B, это помогает думать о A как о2-D матрица и B набор координат, в которые я хочу вставить значение A.

Я попытался использовать numpy.put, но, похоже, он не позволяет мне получить доступ к 2d массиву, и яне знаю, как думать об этом в смысле цикла for.

Желаемый ответ будет выглядеть так:

A = [[1,0,0,0,0,0,0,0,0],[1,2,0,0,0,0,0,0,0],[0,1,3,0,0,0,0,0,0],[0,0,0,4,0,0,0,0,0],...,[0,0,0,0,0,0,0,0,9]]

Любая помощь приветствуется

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вам необходимо сгруппировать первую и вторую координаты вместе:

I, J = zip(*B)

или

I, J = numpy.transpose(B)

Затем вы можете индексировать A напрямую

A[I, J] = 1
0 голосов
/ 03 октября 2018

Сделать B a numpy массив:

B = np.array(b)

Затем просто индексировать, используя первый и второй столбцы:

A[B[:, 0], B[:, 1]] = 1

array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 2, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 4, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 5, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 7, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 8, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 9]])
0 голосов
/ 03 октября 2018

Может быть, для цикла

for x in B:
    A[x[0],x[1]]=1

A
Out[189]: 
array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 2, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 4, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 5, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 7, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 8, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 9]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...