【发布时间】:2016-05-20 01:07:29
【问题描述】:
我有 60000 个 train_images 作为形状 (28,28,60000) 矩阵引入。它是一个 numpy.ndarray。我想将其转换为一维图像数组,这意味着每个图像都表示为单行/数字数组,我想要 60000 个数组。换句话说,我想从 (28, 28, 60000) 到 (60000, 28*28)。在 python 中,它会是:
images_features = []
for image in images:
imageLine = []
for y in range(len(image)):
for x in range(len(image[0])):
imageLine.append(image[y][x])
images_features.append(imageLine)
我该怎么做?我怀疑我需要使用 reshape ,但我不知道我该怎么做。
这就是我获取图像的方式:
data = scipy.io.loadmat('train.mat')
images = data["train_images"]
所以“图像”就是我所说的数组。
有人向我建议:
“您可能需要更改轴或将它们组合起来才能获得所需的功能。我建议您也绘制它们,以防图像最终横向显示。确保您勤于使用轴以避免进一步的问题。”
我不知道这里指的是什么“轴”以及如何考虑上面所说的。
谁能解释我需要做什么以及为什么? (它的作用)
【问题讨论】:
-
如果你希望输出是一个 python 列表,可能是
images.reshape(-1).tolist()(或者没有tolist()否则)? -
-1 有什么作用?我需要一个 1 x 28^2 x 60000 的数组。
-
对不起,我看错了。
-1完全压平矩阵(这不是你想要的)。你可以看看关于N-dimensional array的numpy文档 -
如果我理解得很好,
images.reshape(-1, 60000)会完成这项工作吗?为您提供 60000 个具有 784 个值的特征。要将输出作为 60000 个功能的 python 列表:images.reshape(-1, 60000).T.tolist() -
image.transpose(2,0,1)或image.transpose(2,1,0)?
标签: python arrays numpy reshape