簡體   English   中英

用Python按字節讀取MNIST

[英]Reading MNIST by byte with python

我正在玩MNIST數據集,並且遇到了以下內容,但我不太了解。 根據文檔 ,數據的格式如下:

[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.

因此,我希望對應於項目數(60,000)的字節4-8為:

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', '`')

顯然,我可以反轉它們以獲得預期的順序,但是我對為什么字節似乎反轉感到困惑。

這是一個字中字節排序的偽影。 數據被格式化為整數,因此您應該以這種方式讀取它。 這是“小尾數”尋址,最低(最早)地址具有最低有效字節。 請注意,在第一個字段中,指定的格式為“ MSB優先”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM