使用python

时间:2016-11-07 23:04:55

标签: python mnist

我正在玩MNIST数据集,我遇到了以下情况,我不太明白。根据 documentation数据的格式如下:

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
0004     32 bit integer  60000            number of items 
0008     unsigned byte   ??               label 
0009     unsigned byte   ??               label 
........ 
xxxx     unsigned byte   ??               label
The labels values are 0 to 9.

因此,我希望字节4-8对应于项目数(60,000):

struct.pack('i', 60000)
>> '`\xea\x00\x00'

但是,当我逐字节读取文件时,看起来它们的顺序相反:

with gzip.open(path_to_file, 'rb') as f:
    print struct.unpack('cccc', f.read(4))
    for i in range(4):
        print struct.unpack('c', f.read(1))
>> ('\x00', '\x00', '\x08', '\x01')
>> ('\x00', '\x00', '\xea', '`')

显然,我可以将它们反转以获得预期的顺序,但我很困惑为什么字节似乎颠倒了。

1 个答案:

答案 0 :(得分:1)

这是一个单词中字节排序的工件。数据被格式化为整数,因此你假定以这种方式读取它。这是“小端”寻址,具有最低有效字节的最低(最早)地址。请注意,在第一个字段中,指定的格式为“MSB first”。