是否有更好的方法来表示UINT8数据



我有一个关于UINT8数据表示的问题。

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

使用scipy.io.loadmat(),垫子文件正在读取为Python,并形成了字典。从字典中提取了与垫子文件提交的数据相对应的数组。阵列看起来像:

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

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

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

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

您大概是使用numpy.savetxt,它具有默认的fmt参数'%.18e',含义为"指数格式,具有18位精度。"

您可以将其更改为会吐出整数的东西(例如fmt='%d'),但在文件空间使用方面仍然效率低下(因为它是ASCII-编码整数)。

numpy.save的效率二进制格式更加有效,尽管它包含一些标题(格式说明),但它更接近您的要求。如果您只需要二进制数据,那么DBAUPP建议的tostring是要走的方法:

with open('outfile', 'wb') as f:
    f.write(the_array.tostring())

numpy具有tostring()fromstring(),它们在ndarray数据结构和二进制字符串之间转换。例如

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

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

相关内容

  • 没有找到相关文章

最新更新