Нормализовать все элементы в глубоком вложенном списке Python

У меня есть данные изображения в виде глубокого вложенного списка целых чисел:

len(train_data_imgs) = 3889       # number of images in set
len(train_data_imgs[0]) = 100     # height
len(train_data_imgs[0][0]) = 100  # width
len(train_data_imgs[0][0][0]) = 3 # these are ints - RGB pixel values

Как я могу перебрать их, чтобы нормализовать их от 0 до 1? Просто потребовалось бы, чтобы каждое число было разделено на 255.

Что плохого в делении каждого значения на 255?

Yakov Dan 26.11.2018 14:49

У вас есть 116.670.000 значений, одна итерация займет около 10 секунд. Имеются ли ваши изображения в формате, допускающем массовые операции, например в формате numpy?

MisterMiyagi 26.11.2018 14:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
74
1

Ответы 1

Используйте пакет NumPy для выполнения в строке:

# Assuming an image stored in a nested list | here NumPy array
lst = np.arange(27).reshape(3,3,3)
lst

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

lst = lst/255 # That's what you should look for
lst

array([[[0.        , 0.00392157, 0.00784314],
        [0.01176471, 0.01568627, 0.01960784],
        [0.02352941, 0.02745098, 0.03137255]],

       [[0.03529412, 0.03921569, 0.04313725],
        [0.04705882, 0.05098039, 0.05490196],
        [0.05882353, 0.0627451 , 0.06666667]],

       [[0.07058824, 0.0745098 , 0.07843137],
        [0.08235294, 0.08627451, 0.09019608],
        [0.09411765, 0.09803922, 0.10196078]]])

В чем преимущество использования numpy в этом случае?

Yakov Dan 26.11.2018 14:50

То же самое преимущество, которое NumPy может иметь перед обычным python list;) На самом деле, вы можете продолжить и с обычным списком. Но в чем проблема в том, чтобы узнать что-то получше, особенно когда это изображения. :)

sync11 26.11.2018 14:52

Тогда возникает вопрос, как в первую очередь преобразовать изображения в формат numpy и нужно ли их извлекать позже снова.

MisterMiyagi 26.11.2018 14:55

@MisterMiyagi Правда

sync11 26.11.2018 14:56

Нет ничего плохого в использовании лучшего инструмента! Однако, если у вас уже есть изображение в памяти, хранящееся в виде списков списков, почему было бы лучше преобразовать в массив numpy, а затем использовать numpy вместо простого перебора списков?

Yakov Dan 26.11.2018 14:56

Другие вопросы по теме