有没有更好的方法来表示uint8数据

1 python arrays numpy usrp uint

我有一个关于uint8数据表示的问题.

我有一个MATLAB MAT文件,其中保存了uint8数据.

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

array[[162],[122],...[135],dtype:uint8]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dou*_*gal 7

你可能正在使用numpy.savetxt,它有默认fmt参数'%.18e',意思是"以18位精度的指数格式".

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

numpy.save是一个更有效的二进制格式,它更接近你所要求的,虽然它包括一些标题(格式描述).如果您只想要二进制数据,那么tostring dbaupp建议的方法是:

with open('outfile', 'wb') as f:
    f.write(the_array.tostring())
Run Code Online (Sandbox Code Playgroud)


huo*_*uon 5

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

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

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