在scipy.io.savemat中以不同的数值数据格式保存mat文件

3
我知道这很简单,但我真不敢相信任何地方都找不到相关信息,以下是内容:
我在Python中有一个大的、高维度的矩阵,我想把它保存为.mat格式(用于Matlab)。 我使用scipy.io.savemat方法来保存这个矩阵,但它总是保存为双精度。我想将其保存为较低精度的类型,如单精度或16位浮点数。 我在保存之前将数组转换为低精度数据类型,但它总是保存为双精度。难道真的没有办法以更低精度的浮点数类型保存mat文件吗? .savemat似乎不接受dtype参数。
 import scipy as sp
 sp.io.savemat('test.mat', {'test': sp.array([0.001, 1, 1.004], dtype='Float16')})
1个回答

3

显然,它需要是单精度或双精度。scipy.io.savemat()不支持其他浮点精度,如果它不喜欢您的数据类型,则会默认使用双精度而没有警告。


这很有趣,感谢您查找。如果需要,新版本的Matlab也可以将数据写入HDF5格式的文件中。 - eickenberg
是的,在我的简单测试中,“float32”和“float”会产生不同大小的文件(“float”大2倍),但“float16”保存方式类似于“float”。 - hpaulj
1
http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf - 这个单精度和双精度浮点数的问题是MATLAB的限制。另一方面,对于整数,'int16'和'int8'可以使用。 - hpaulj
1
@hpaulj,没错,这是Matlab的设计。我想有点违反直觉的是,它在没有float16的情况下使用float64,而不是32。事实上,它没有在scipy中记录任何文档,并且没有显示任何警告,这也有点令人烦恼。 - aarslan
numpy 中,float64 是默认的浮点值。在 savemat 中,可能没有太多代码来处理这个问题。 - hpaulj
我该怎么做才能强制savemat()以单精度保存而不是双精度? - insanely_sin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接