我正在玩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', '`')
显然,我可以将它们反转以获得预期的顺序,但我很困惑为什么字节似乎颠倒了。
答案 0 :(得分:1)
这是一个单词中字节排序的工件。数据被格式化为整数,因此你假定以这种方式读取它。这是“小端”寻址,具有最低有效字节的最低(最早)地址。请注意,在第一个字段中,指定的格式为“MSB first”。