我正在使用CIFAR 10数据集,并且在从数据集中提取图像时遇到完全相同的问题,如此帖子
loading an image from cifar-10 dataset
此数据集中的图像具有以下结构 -
每个阵列都存储一个32x32彩色图像。前1024个条目包含 红色通道值,下一个1024绿色,最后1024 蓝色。图像以行主顺序存储,因此第一个32 数组的条目是第一行的红色通道值 图像。
用于提取我正在做的图像(我以前做过并且工作过)
df_im = np.reshape(df ['数据'],(df ['数据']。形状[0],32,32,3))
此重塑不按预期工作。
但这有效 -
df_im = np.reshape(df ['数据'],(df ['数据']。形状[0],3,32,32))
为什么后者在这种情况下工作但不是前者。以及如何决定np.reshape" shape"基于扁平阵列结构的元组。
答案 0 :(得分:0)
让我们使用较小的'
来重新创建数据。:In [68]: R = np.arange(4)
In [69]: G = np.arange(10,14)
In [70]: B = np.arange(20,24)
In [71]: rgb = np.hstack([R,G,B])
In [72]: rgb
Out[72]: array([ 0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23])
这看起来像你的一张照片,不是吗?前N个值是红色',接下来的N是'绿色'等>
重塑为2d:
In [73]: rgb.reshape(3,4)
Out[73]:
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23]])
重塑为3d:
In [74]: rgb.reshape(3,2,2)
Out[74]:
array([[[ 0, 1],
[ 2, 3]],
[[10, 11],
[12, 13]],
[[20, 21],
[22, 23]]])
' row major'意味着第一个维度是最外层的,并且变化最慢。最后一个维度是内部维度。
In [75]: rgb.reshape(2,2,3)
Out[75]:
array([[[ 0, 1, 2],
[ 3, 10, 11]],
[[12, 13, 20],
[21, 22, 23]]])
reshape
保留数据元素的顺序。它只是改变了它们的观察方式,划分方式,可以说是平面,行和列。