2017-01-06 74 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)] 
相关问题