2017-01-06 17 views
2

Pythonでバイナリファイルを読み込もうとしました。 dataset pageから:バイナリファイルのデータを配列に読み込む方法は?

画素は符号なし文字(1バイト)として格納され、255

に 0の値を取るされている私は(0,)を印刷以下、よりもむしろ784000桁を試みましたアレイ。

# -*- coding: utf8 -*- 
# Processed MNIST dataset (http://cis.jhu.edu/~sachin/digit/digit.html) 
import struct 

f = open('data/data0', mode='rb') 
data = [] 

print struct.unpack('<i', f.read(4)) 

はどのよう784000桁の配列のいずれかに(28バイト×28バイト×1Kサンプル)、または28x28x1000 3Dアレイをこのバイナリを読み取ることができます。以前はバイナリで作業したことがなく、かなり混乱しています!

+1

Pythonを使用していくつかの既存の作業は、MNISTの数字のイメージを読んで、思っただけの食べ物です。 https://github.com/sorki/python-mnist/blob/master/mnist/loader.py –

答えて

2

f.read()は、784,000バイトの不変の配列(Python 2ではstrと呼ばれます)を取得します。あなたが可変であることをそれを必要とする場合は、様々なプリミティブを格納することができるarray moduleとその配列型を使用することができ、(Bコードによって表される)符号なしバイトが含まれる:これは必要に応じてスライスすることができる

from array import array 

data = array('B') 

with open('data/data0', 'rb') as f: 
    data.fromfile(f, 784000) 

EXAMPLE_SIZE = 24 * 24 
examples = [data[s:s + EXAMPLE_SIZE] for s in xrange(0, len(a), EXAMPLE_SIZE)] 
関連する問題