plt.imshow(np.squeeze(x_train[3]), cmap=»серый»); что означает эта команда?

#python

#python

Вопрос:

Я работал над классификацией изображений. Я наткнулся на эту единственную строчку и не могу понять ее смысла.

 plt.imshow(np.squeeze(x_train[3]), cmap=“gray”); 
 

Не могли бы вы объяснить мне эту строчку?

Ответ №1:

Это действительно зависит от того, что x_train содержит ваша переменная. Вы не даете контекста своему коду. Я могу сделать вывод, что x_train это массив numpy, который индексируется по четвертому элементу или строке.

plt.imshow это функция из библиотеки matplotlib, которая принимает массив, представляющий изображение, и выводит его на экран. Массив обычно представляет собой либо 2D-массив, представляющий строки и столбцы пикселей, либо 3D-массив, где каждый пиксель характеризуется либо 3 значениями для RGB, либо 4 значениями для RGBA (A обозначает альфа и указывает прозрачность).

cmap="gray" Это переданный аргумент ключевого слова plt.imshow , который отвечает за сопоставление определенной цветовой карты со значениями, найденными в массиве, который вы передали в качестве первого аргумента. Вы можете посмотреть цветовую карту, если вы используете цветовые карты Google matplotlib. Поскольку в вашем коде используется серая цветовая карта, весьма вероятно, что ваш массив представляет собой 2D-массив, представляющий изображение в оттенках серого. В этом случае каждый пиксель описывается только одним значением (обычно от 0 до 255), которое указывает его цвет по шкале от черного (0) до белого (255). Если вы передадите 3D-массив (то есть цветное изображение) в imshow, matplotlib автоматически интерпретирует значения в третьем измерении как значения RGB и правильно отобразит изображение. Однако, если вы передадите 2D-массив, что, вероятно, так и есть, matplotlib сопоставит значения с цветовой картой, которая по умолчанию является «viridis». Это приведет к зеленому / желтому / синему изображению. Поэтому необходимо указать matplotlib, чтобы отобразить его на цветовую карту в оттенках серого.

Таким образом, я предполагаю, что x_train это массив numpy с более чем двумя измерениями, который, вероятно, содержит несколько изображений. Когда вы индексируете его по индексу 3, вы получаете часть массива, которая содержит значения для изображения, которое вы хотите отобразить. Этот массив, похоже, имеет больше измерений, чем используется на самом деле, поэтому используется np.squeeze для уменьшения ненужных размеров. В качестве примера:

 import numpy as np
test_array = np.array([[1, 2, 3]])
np.squeeze(test_array)
>>> array([1, 2, 3])
 

Это все, что я могу сказать вам из той небольшой информации, которую вы мне дали. В следующий раз рассмотрите возможность предоставления большего контекста вашему вопросу.