为什么用 scipy 保存 mat 文件比用 Matlab 保存的文件大?
Why does saving mat files with scipy result in larger file size than with Matlab?
假设我从 Matlab 生成了以下玩具数据集,并将其保存为 mat 文件:
>> arr = rand(100);
>> whos arr
Name Size Bytes Class Attributes
arr 100x100 80000 double
>> save('arr.mat', 'arr')
根据 ls
命令的输出,保存的 arr.mat
文件大小为 75829 Bytes
。
如果我使用 scipy.io.loadmat()
加载同一个文件并使用 scipy.io.savemat()
再次保存:
arr = io.loadmat('arr.mat')
with open('arrscipy.mat', 'w') as f:
io.savemat(f, arr)
我获得了一个大小相差很大的文件(~ 4KB):
$ ls -al
75829 Nov 6 11:52 arr.mat
80184 Nov 6 11:52 arrscipy.mat
我现在有两个包含相同数据的二进制 mat 文件。我的理解是,二进制 mat 文件的大小取决于其包含的变量的大小,加上文件头的一些开销。但是这两个文件的大小有很大不同。为什么是这样? Is it a data format problem?
我也对结构数组进行了尝试,结果类似:scipy-保存的 mat 文件比 Matlab 保存的大。
看看 docs:
scipy.io.savemat(file_name, mdict, appendmat=True, format='5',
long_field_names=False, do_compression=False, oned_as='row')
压缩默认关闭。在 matlab 中压缩总是打开的。
设置 do_compression=True 时有一个问题。对于大文件,使用 do_compression=True.
保存时 MATLAB 无法加载
就我而言,无论 do_compression 是真还是假,从我的 MATLAB (2017b) 加载 2 GB 以下的 mat 文件都没有任何问题,但是当我加载使用 [= 保存的 2.25 GB mat 文件时18=]() 使用压缩,MATLAB 无法加载,即使我可以使用 loadmat() 从 Python 加载它。
在scipy.io.savemat手册中,format的默认值='5',最高支持MATLAB 7.2。这是它支持的最新版本。然而,在 MATLAB 的 save() 文档中,它表示对于超过 2GB 的文件需要使用“-v7.3”进行保存。我认为scipy的savemat无法正确保存的原因是它不支持大于2GB的mat文件的MATLAB 7.3版本。
希望 scipy 有升级来解决这个问题。
假设我从 Matlab 生成了以下玩具数据集,并将其保存为 mat 文件:
>> arr = rand(100);
>> whos arr
Name Size Bytes Class Attributes
arr 100x100 80000 double
>> save('arr.mat', 'arr')
根据 ls
命令的输出,保存的 arr.mat
文件大小为 75829 Bytes
。
如果我使用 scipy.io.loadmat()
加载同一个文件并使用 scipy.io.savemat()
再次保存:
arr = io.loadmat('arr.mat')
with open('arrscipy.mat', 'w') as f:
io.savemat(f, arr)
我获得了一个大小相差很大的文件(~ 4KB):
$ ls -al
75829 Nov 6 11:52 arr.mat
80184 Nov 6 11:52 arrscipy.mat
我现在有两个包含相同数据的二进制 mat 文件。我的理解是,二进制 mat 文件的大小取决于其包含的变量的大小,加上文件头的一些开销。但是这两个文件的大小有很大不同。为什么是这样? Is it a data format problem?
我也对结构数组进行了尝试,结果类似:scipy-保存的 mat 文件比 Matlab 保存的大。
看看 docs:
scipy.io.savemat(file_name, mdict, appendmat=True, format='5',
long_field_names=False, do_compression=False, oned_as='row')
压缩默认关闭。在 matlab 中压缩总是打开的。
设置 do_compression=True 时有一个问题。对于大文件,使用 do_compression=True.
保存时 MATLAB 无法加载就我而言,无论 do_compression 是真还是假,从我的 MATLAB (2017b) 加载 2 GB 以下的 mat 文件都没有任何问题,但是当我加载使用 [= 保存的 2.25 GB mat 文件时18=]() 使用压缩,MATLAB 无法加载,即使我可以使用 loadmat() 从 Python 加载它。
在scipy.io.savemat手册中,format的默认值='5',最高支持MATLAB 7.2。这是它支持的最新版本。然而,在 MATLAB 的 save() 文档中,它表示对于超过 2GB 的文件需要使用“-v7.3”进行保存。我认为scipy的savemat无法正确保存的原因是它不支持大于2GB的mat文件的MATLAB 7.3版本。
希望 scipy 有升级来解决这个问题。