Как обойти двумерный массив, попутно заменяя в нём элементы? Имеется матрица 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
216 +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 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир