有没有更好的方法来表示uint8d

2024-09-29 19:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个matlabmat文件,其中保存了uint8数据。在

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

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

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

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

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


Tags: 文件数据iotxt字典字节scipy数组
2条回答

Numpy有^{}和{a2},它们在ndarray数据结构和二进制字符串之间转换。E、 g

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

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

您大概使用的是^{},它有默认的fmt参数{},意思是“以指数格式,精度为18位。”

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

^{}是一种效率更高的二进制格式,它更接近您所要求的格式,尽管它包含一些头文件(format description)。如果只需要二进制数据,那么tostringas suggested by dbaupp就是最好的选择:

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

相关问题 更多 >

    热门问题