Как обойти двумерный массив, попутно заменяя в нём элементы? Имеется матрица 800*600, нужно пройти по ней циклом и применить к каждому элементу этой матрицы преобразование формулой.
Допустим, циклом я прошелся:for row in img:
for x in row:
x = (x - min_br) * (255 / (max_br - min_br)) # на новый х не заменяется
А вот применить преобразование не получается. То есть для того чтобы каждый элемент x заменялся на тот, что в формуле, нужно проделывать дополнительные операции:img_contrast = np.empty(0)
for row in img:
for x in row:
x = (x - min_br) * (255 / (max_br - min_br))
img_contrast = np.append(img_contrast, x)
img_contrast = np.reshape(img_contrast, (800, 600))
Все эти reshape требуют дополнительного времени, и вроде всё работает, но гораздо медленнее, чем хотелось бы. Так как можно пройтись циклом по двумерному массиву, применяя формулку к каждому элементу?

21 Авг 2019 в 06:23
248 +1
0
Ответы
1

Вы можете использовать индексы элементов во вложенном цикле, чтобы обойти двумерный массив и заменить элементы в нем. Вот пример кода:

import numpy as np
# создание матрицы 800*600 для примера
img = np.random.randint(0, 255, size=(800, 600))
min_br = np.min(img)
max_br = np.max(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img[i, j] = (img[i, j] - min_br) * (255 / (max_br - min_br))
print(img)

Этот код будет проходить по каждому элементу двумерного массива img, применяя преобразование к каждому элементу без использования дополнительных операций для изменения формы массива.

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир