MNIST手写图片分类问题关于数据转换的问题

我先手动导入了MNIST数据集mat文件,并且输出其中data的二维数组规格,也是正常的,一共有7万张图片数据,每一张图片有784个特征。

img


但是在下面将data中第一张图片X[0]转换为28×28的数组时,却报错,说不能将大小为70000的数组转换为(28,28)规格的数组,这是为什么呢?X[0]应该是第一张图片的784个特征,大小应该是784个元素才对呀,在第一张图片显示的X规格也是784个特征,怎么转换成矩阵数组的时候就显示大小为70000了呢

img

X[:,0]

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据你的代码和输出,X的形状是(784,70000),因此每个样本都是大小为784的一维数组,而不是二维数组。因此,当你尝试将X[0](大小为784)重塑为28×28时,会出现错误,因为它需要有相同数量的元素来重新塑形。实际上,你需要先将X转换为形状为(70000, 784)的二维数组,然后再将每个样本重塑为28×28大小的图像。可以使用以下代码完成此操作:

import numpy as np
import matplotlib.pyplot as plt
import scipy.io

mnist = scipy.io.loadmat('mnist-original.mat')
X = mnist['data']
y = mnist['label']

X_reshaped = np.reshape(X, (70000, 28, 28))
some_digit = X_reshaped[0]
plt.imshow(some_digit, cmap="binary")
plt.axis("off")
plt.show()


首先,使用numpy的reshape()函数将X转换为形状为(70000,28,28)的三维数组。然后,可以像上面那样选择一个图像,将其传递给imshow()函数进行绘制。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^