4

textscan 関数を使用して、Matlab でテキストファイルのテキストをスキャンしたいと思います。fid = fopen('C:\path') でテキスト ファイルを開く前に、まずファイルを解凍する必要があります。ファイルの拡張子は *.gz です。

何千ものファイルを分析する必要があり、高いパフォーマンスが重要です。

私には 2 つのアイデアがあります。(1) 外部プログラムを使用して、Matlab のコマンド ラインから呼び出します。(2) Matlab の「zip」ツールボックスを使用します。ガンジップのことは聞いたことがありますが、その性能については知りません。

これらのファイルを Matlab 内からできるだけ早く解凍する方法を知っている人はいますか?

ありがとう!

4

3 に答える 3

2

これに関しては、 7zip-commandline(Windows) / p7zip(Unix) の方がいくぶん高速であることがわかりました。

[編集] いくつかの簡単なテストから、gunzip へのシステム コールを作成することは、MATLAB のネイティブの gunzip を使用するよりも高速であるようです。あなたもそれを試してみることができます。

基本的な MATLAB gunzip 機能を模倣する新しい関数を作成するだけです。

function [] = sunzip(fullfilename,output_dir)
if ~exist('output_dir','var'), output_dir = fileparts(fullfilename); 終わり

app_path = '/usr/bin/7za';
スイッチ = 'e'; % ディレクトリ構造
オプションを無視してファイルを抽出 = [' -o' output_dir];

system([app_path スイッチ オプション '_' フルファイル名]);

次に、gunzip を使用する場合と同じように使用します。

sunzip('/data/time_1000.out.gz',tmp_dir);

MATLAB のtocタイマーを使用すると、圧縮されていない 114 MB の ASCII ファイル 6 つを次の抽出時間で取得できます。

gunzip: 10.15 秒
sunzip: 7.84 秒

于 2010-04-16T11:53:48.933 に答える
2

Matlab の unzip() 関数をいつでも試すことができます。

解凍する

zipファイルの内容を抽出する

構文

unzip(zipfilename) unzip(zipfilename, outputdir) unzip(url, ...) filenames = unzip(...)

説明

unzip(zipfilename) は、zipfilename のアーカイブされたコンテンツを現在のフォルダーに抽出し、ファイルの属性を設定して、タイムスタンプを保持します。既存のファイルの属性と所有権で許可されている場合、アーカイブ内のファイルと同じ名前の既存のファイルを上書きします。たとえば、同じ zip ファイル名で unzip を再実行したファイルは、読み取り専用属性を持つファイルを上書きしません。代わりに、unzip はそのようなファイルに対して警告を発行します。

内部的には、これは Java の zip ライブラリを使用しますorg.apache.tools.zip。それぞれの zip アーカイブに多くのテキスト ファイルが含まれている場合は、ファイルを明示的に解凍せずに、Java にドロップダウンしてエントリごとに抽出する方が速い場合があります。いくつかのアイデアを得るために unzip.m のソースと、Java のドキュメントを見てください。

于 2010-02-19T11:05:20.630 に答える
1

実行可能ファイルを呼び出す Max の構文を少し変更する必要がありました。

system([app_path switches ' ' fullfilename options ]);
于 2014-03-28T18:19:34.047 に答える