#python #arrays #numpy #indexing
#python #массивы #numpy #индексирование
Вопрос:
Это трудно описать словами, но легко увидеть на практике. У меня есть 2D-массив:
im = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
Я интерпретирую это как изображение в оттенках серого 4×4, поэтому значения в массиве — это просто интенсивности. Итак, для начала, 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]]
Кто-нибудь знает быстрый и элегантный способ сделать это?
Спасибо!
Комментарии:
1.
im[x, y] = 9
Работает?2. ха-ха … да, действительно так! Я мог бы поклясться, что я пробовал это! Ну что ж, это не самая глупая вещь, которую я делал в последнее время, но она прямо там 🙂
Ответ №1:
Вы можете просто сделать 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]])
Комментарии:
1. Это просто повторяет то, что было сказано в комментариях
Ответ №2:
В общем, если у вас есть массив 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]
])
Комментарии:
1. Это просто повторяет то, что было сказано в комментариях
2. @RafaelC Я также хотел добавить, что вы также можете предоставить список значений, который не был приведен в комментариях.