如何根据图像结构决定np.reshape(图像,(形状))形状元组

时间:2018-04-27 04:10:19

标签: python pandas numpy

我正在使用CIFAR 10数据集,并且在从数据集中提取图像时遇到完全相同的问题,如此帖子

loading an image from cifar-10 dataset

此数据集中的图像具有以下结构 -

  

每个阵列都存储一个32x32彩色图像。前1024个条目包含   红色通道值,下一个1024绿色,最后1024   蓝色。图像以行主顺序存储,因此第一个32   数组的条目是第一行的红色通道值   图像。

用于提取我正在做的图像(我以前做过并且工作过)

  

df_im = np.reshape(df ['数据'],(df ['数据']。形状[0],32,32,3))

Not working Image

此重塑不按预期工作。

但这有效 -

  

df_im = np.reshape(df ['数据'],(df ['数据']。形状[0],3,32,32))

Working Image

为什么后者在这种情况下工作但不是前者。以及如何决定np.reshape" shape"基于扁平阵列结构的元组。

1 个答案:

答案 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保留数据元素的顺序。它只是改变了它们的观察方式,划分方式,可以说是平面,行和列。