2016-11-07 4 views
0

私はMNISTデータセットで遊んでいますが、私はそれほど理解していない次のことに遭遇しました。しかしながらMNISTをPythonでバイトで読む

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

:従って

[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期待、次のよう documentationに係るデータがフォーマットされています私は、ファイルのバイトごとを読んだとき、彼らは逆の順序であるように、それが見えます:

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

明らかに、私は期待順序を得るためにそれらを逆にすることができますが、私はconfuですなぜバイトが逆転しているように見えるのか、

答えて

1

これは、単語内のバイト順序の成果物です。データは整数でフォーマットされていますので、と書いてあります。はそうです。これは、「リトルエンディアン」アドレッシングであり、最下位バイトを有する最も低い(最古の)アドレスである。最初のフィールドでは、指定されたフォーマットは "MSBファースト"であることに注意してください。

関連する問題