1

我对 uint8 数据的表示有疑问。

我有一个保存 uint8 数据的 MATLAB MAT 文件。

MAT 文件正在使用 Python 读入scipy.io.loadmat()并形成字典。MAT文件的数据字段对应的数组是从字典中提取出来的。数组看起来像:

array[[162],[122],...[135],dtype:uint8]

之后,将该数组保存为 txt 格式,以供以后读取文件。但是,txt文件中的数据是双精度的。例如,uint8数据162保存为1.620000000000000000e+02. 这不是我想要的,因为它会占用太多内存。

我需要的是每一个字节source_file.read()对应一个uint8数据。

有没有更好的方法来表示 uint8 数据?将 uint8 转换为字符串是可能的,但仍需要 2-3 个字节。

4

2 回答 2

7

您可能正在使用numpy.savetxt,它具有默认fmt参数'%.18e',意思是“具有 18 位精度的指数格式”。

您可以将其更改为会输出整数的内容(例如fmt='%d'),但这在文件空间使用方面仍然非常低效(因为它是 ASCII 编码的整数)。

numpy.save是一种更有效的二进制格式,虽然它包含一些标题(格式描述),但它更接近您的要求。如果您只想要二进制数据,那么tostring 按照 dbaupp 的建议是要走的路:

with open('outfile', 'wb') as f:
    f.write(the_array.tostring())
于 2012-10-22T19:55:47.803 回答
5

Numpy在数据结构tostring()和二进制字符串fromstring()之间进行转换。ndarray例如

> a = numpy.array([162,122,135], dtype=numpy.uint8)
> a.tostring()
'\xa2z\x87'

(那个字符串是['\xa2', 'z', '\x87']\x..代表一个字节。)

于 2012-10-22T19:57:38.443 回答