有成千上万个文件需要分析,高性能很重要。
我有两个想法: (1) 使用外部程序并从Matlab命令行调用它 (2) 使用Matlab的'zip'工具箱。我听说过gunzip,但不知道它的性能如何。
有人知道如何在Matlab内尽快地解压这些文件吗?
谢谢!
您可以尝试使用Matlab的unzip()函数:
解压缩zip文件的内容
unzip(zipfilename) unzip(zipfilename, outputdir) unzip(url, ...) filenames = unzip(...)
unzip(zipfilename) 将zipfilename中存档的内容提取到当前文件夹,并设置文件属性,保留时间戳。如果现有文件的属性和所有权允许,则覆盖与存档中相同名称的任何现有文件。例如,重新运行unzip以使用相同的zip文件名提取文件时,不会覆盖具有只读属性的任何文件;而是针对这些文件发出警告。
在内部,它使用Java的zip库org.apache.tools.zip
。如果您的zip存档中包含许多文本文件,那么使用Java逐个条目提取它们可能会更快,而无需显式解压缩文件。查看unzip.m的源代码以获取一些想法,以及Java文档。
我发现在这种情况下,7zip命令行(Windows) / p7zip(Unix)速度更快。
[编辑]从快速测试中,似乎通过调用系统来使用gunzip比使用MATLAB本机gunzip更快。你也可以尝试一下这个方法。
只需编写一个新函数,模仿基本的MATLAB gunzip功能:
function [] = sunzip(fullfilename,output_dir)
if ~exist('output_dir','var'), output_dir = fileparts(fullfilename); endapp_path = '/usr/bin/7za';
switches = ' e'; %提取文件而忽略目录结构
options = [' -o' output_dir];system([app_path switches options '_' fullfilename]);
然后像使用gunzip一样使用它:
sunzip('/data/time_1000.out.gz',tmp_dir);
使用MATLAB的toc
计时器,在6个未压缩的114MB ASCII文件中获得以下提取时间:
gunzip:10.15秒
sunzip:7.84秒
运行良好,只需对调用可执行文件的Max语法做出微小更改。
system([app_path switches ' ' fullfilename options ]);