如何将二进制文件数据读入数组?

4

尝试在Python中读取二进制文件。来自数据集页面

像素以无符号字符(1字节)存储,并且取值范围为0到255。

我尝试了以下代码,但它只打印出(0,)而不是一个包含784,000个数字的数组。

# -*- 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))

我该如何将这个二进制文件读入到一个784,000位数字数组(28字节x 28字节x 1k样本),或者一个28x28x1000的3D数组中。我以前从未处理过二进制文件,感到很困惑!


1
这只是一个思路,一些使用Python读取MNIST数字图像的现有工作。https://github.com/sorki/python-mnist/blob/master/mnist/loader.py - B.Mr.W.
1个回答

6

f.read()会返回一个不可变的数组,包含784,000个字节(在Python 2中称为str)。如果您需要使其可变,可以使用array模块及其能够存储各种基本类型、包括无符号字节(用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)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接