Python NumPy присваивает значения 2D-массиву, используя другой массив с упорядоченными парами в качестве индексов для 2D-массива. - PullRequest
0 голосов
/ 05 апреля 2019

Это трудно описать словами, но легко увидеть на практике.У меня есть 2D-массив:

im = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])

Я интерпретирую его как изображение в градациях серого 4x4, поэтому значения в массиве просто интенсивности.Итак, для начала, im это:

[[0,0,0,0],
 [0,0,0,0],
 [0,0,0,0],
 [0,0,0,0]]

Я хочу иметь возможность изменять много значений в «изображении» одновременно в соответствии с массивом значений x и массивом значений y.Я собираю их так, чтобы они выглядели как упорядоченные пары во втором массиве следующим образом:

x = [0,1]
y = [2,3]
coords = np.array([x,y]).T

Теперь coords выглядит так:

array([[0, 2],
       [1, 3]])

Наконец, я хочу проиндексировать im по координатам,Я подумал, что, возможно, это было что-то вроде этого:

im[coords] = 9

... но это не работает.Я бы хотел, чтобы конечный результат im был:

[[0,0,9,0],
 [0,0,0,9],
 [0,0,0,0],
 [0,0,0,0]]

Кто-нибудь знает быстрый и элегантный способ сделать это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Вы можете просто сделать im[x,y] = 9.

например:

im = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
x = [0,1]
y = [2,3]
im[x,y] = 9
print(im)
# Result:
# array([[0, 0, 9, 0],
#        [0, 0, 0, 9],
#        [0, 0, 0, 0],
#        [0, 0, 0, 0]])
0 голосов
/ 05 апреля 2019

В общем случае, если у вас массив numpy

import numpy as np
arr = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
x_coords = [0, 1]
y_coords = [2, 3]
values = [8, 9]

тогда

arr[x, y] = values

приведет к

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