我对 uint8 数据的表示有疑问。
我有一个 MATLAB MAT 文件,其中保存了 uint8 数据。
MAT 文件正在使用 scipy.io.loadmat() 读入 Python,并形成一个字典。 从字典中提取MAT文件数据字段对应的数组。 该数组如下所示:
array[[162],[122],...[135],dtype:uint8]
之后将这个数组保存成txt格式,以供后面的文件读取。 但是,txt文件中的数据是 double 的。例如,uint8数据162保存为1.620000000000000000e+02。这不是我想要的,因为它会占用太多内存。
我需要的是 source_file.read() 中的每个字节对应一个 uint8 数据。
是否有更好的方式来表示 uint8 数据?可以将 uint8 转换为字符串,但仍需要 2-3 个字节。
请您参考如下方法:
您可能正在使用 numpy.savetxt ,它有默认的 fmt 参数 '%.18e',意思是“以 18 位精度的指数格式。”
您可以将其更改为会输出整数的内容(例如 fmt='%d'),但就文件空间使用而言,这仍然非常低效(因为它是一个 ASCII-编码整数)。
numpy.save是一种更有效的二进制格式,更接近您的要求,尽管它包含一些标题( format description )。如果您只需要二进制数据,那么 tostring as suggested by dbaupp是要走的路:
with open('outfile', 'wb') as f:
f.write(the_array.tostring())
