私はMATLABを使用して出力ファイルを読み込み、同じファイルに対してPythonで書いた読者と比較してかなりゆっくりとファイルを読み込んでいたことに気づきました。 MATLABの場合は120秒、Pythonの場合は4秒です)。ファイルには文字と数字の組み合わせがありますが、実際にはそれぞれ同じ行に一意の文字列が必要ですが、残りのファイルには実際のパターンはありません。非一様にフォーマットされたテキストファイルをMATLABで高速に読み取る方法はありますか?MATLABでの高速文字列分割
私はMATLABのコードプロファイラを使って何が最も時間がかかるか調べてみましたが、それはstrfind
とstrsplit
の機能のようでした。深く下に行くと、strfun\private\strescape
はstrsplit
機能によって呼び出される時間の約50%を占める犯人のようです。
私は現在、5つの特定の文字列のファイルを検索し、その後にその文字列をダブルに変換するためにstrfindとstrsplitの組み合わせを使用しています。
lots of text before this
#### unique identifying text here
lots of text before this
sometext X = #####
Y = #####
Z = #####
more text = ######
私は、見つかった各番号に対して、およそ次のコードでファイルを繰り返しています。
fid=fopen(filename)
tline=fgets(fid)
while ischar(tline)
if ~isempty(strfind(tline('X =')))
tempstring=strsplit(tline(13:length(tline)),' ');
result=str2double(char(tempstring(2)));
end
tline=fgets(fid);
end
'strsplit'はセル配列を返します。セル配列も非常に遅いです。そして、私は、いくつかの文字列操作関数は、オーバーヘッドの束を持っていると信じています。 'textscan'を使ってみましたか?それとももっと良いのですか?あなたのpythonスクリプトは?:) –
あなたの方法は一般的には非効率的だと思われますが、実際のファイルを使わずにパフォーマンスを "比較"することはあまりありません。リンクできるコピーがありますか? –
また、私はあなたが基本的にX YとZの値を求めていると考えて正しいですか? –