2017-01-06 104 views
2

嘗試在python中讀取二進制文件。從dataset page:從 0到255如何將二進制文件數據讀入數組?

我曾嘗試以下,打印(0,),而不是一個784000位

的像素被視爲無符號字符(1個字節)存儲,並採取值陣列。

# -*- 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)] 
相關問題