7

我正在考虑使用亚马逊云来满足我的所有模拟需求。生成的 sim 文件非常大,我想将它们移动到我的本地驱动器以便于分析等。您必须为移动的每个数据付费,所以我想将我所有的 sim 解决方案压缩得尽可能小。它们只是以 .mat 文件的形式保存的 numpy 数组,使用:

import scipy.io as sio
sio.savemat(filepath, do_compression = True) 

所以我的问题是,压缩 numpy 数组的最佳方法是什么(它们当前存储在 .mat 文件中,但我可以使用任何 python 方法存储它们),通过使用 python 压缩保存、linux 压缩或两者兼而有之?

我在linux环境中,我对任何类型的文件压缩持开放态度。

4

3 回答 3

7

除非您对数组有一些特别的了解(例如稀疏性或某种模式),否则您不会比默认压缩做得更好,也许 gzip 在此之上。事实上,如果您使用 HTTP 进行下载并且您的服务器配置为进行压缩,您甚至可能不需要 gzip 文件。好的无损压缩算法的变化很少超过 10%。

如果 savemat 像广告宣传的那样工作,你应该能够在 python 中获得 gzip 压缩:

import scipy.io as sio
import gzip

f_out = gzip.open(filepath_dot_gz, 'wb')
sio.savemat(f_out, do_compression = True)
于 2011-08-19T02:24:23.183 回答
2

LZMA (AKA xz) 也对相当稀疏的 numpy 数组提供了非常好的压缩,尽管压缩时它非常慢(并且可能还需要更多内存)。

在 Ubuntu 中,它安装在sudo apt-get install python-lzma

它用作任何其他文件对象包装器,类似这样(加载腌制数据):

from lzma import LZMAFile
import cPickle as pickle

if fileName.endswith('.xz'):
   dataFile = LZMAFile(fileName,'r')
else:
   dataFile = file(fileName, 'ro')     
data = pickle.load(dataFile)
于 2013-06-25T06:11:03.990 回答
0

虽然它不一定会给你最高的压缩率,但我有很好的经验,使用python-blosc将压缩的 numpy 数组保存到磁盘。它非常快并且与 numpy 集成得很好

于 2018-07-09T23:09:08.943 回答