如果我想显示mnist数据集中的一个图像,我需要使用以下代码将其从(1,28,28)重新整形为(28,28):
import tensorflow as tf
import matplotlib.pyplot as plt
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
sample = x_train[:1].reshape((28,28))
plt.imshow(sample, cmap="gray")
plt.show()
但是,如果我想在同一个绘图中显示多个图像,我不需要用下面的代码重新调整它们的形状:
import tensorflow as tf
import matplotlib.pyplot as plt
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.imshow(x_train[i])
plt.show()
为什么在第二个代码中不需要整形?
1条答案
按热度按时间tkclm6bt1#
如果使用
x_train[0]
选择第一个图像,也不需要对第一个图像进行整形。访问数组的特定索引将删除形状的第一个元素。因此,如果你有一个形状为(100,28,28)的numpy数组,并访问
x_train[0]
,你会得到一个形状为(28,28)的数组,但如果你以x_train[:1]
的形式访问它,你仍然有三维空间:〔一、二十八、二十八〕。这样做是因为您也可以执行x_train[:2]并获取前两个图像,因此它需要一个维度来跟踪您选择了多少个图像。