Как в 2d массиве numpy заменить значения по списку индексов?

Пользователь

от abel , в категории: Python , 7 месяцев назад

Как в 2d массиве numpy заменить значения по списку индексов?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jaren , 7 месяцев назад

@abel 

Для замены значений в двумерном массиве numpy по списку индексов можно воспользоваться индексацией через маску.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import numpy as np

# Создание массива
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# Список индексов для замены значений
indexes = [(0, 0), (1, 1), (2, 2)]

# Создание маски
mask = np.zeros_like(arr, dtype=bool)
mask[tuple(zip(*indexes))] = True

# Замена значений
arr[mask] = 0

print(arr)


Вывод:

1
2
3
[[0 2 3]
 [4 0 6]
 [7 8 0]]


В этом примере создается массив arr. Затем создается список indexes, в котором указаны индексы элементов, которые нужно заменить. Дальше создается маска mask того же размера, что и arr. Значения элементами списка indexes устанавливаются в True в маске mask. Наконец, заменяются значения в массиве arr, используя эту маску.