1

一般的に言えば、数値とテキストの両方のデータ型が混在する多くのテキスト ファイルを処理する必要があります。数値データについては、多くのデータ ソースを扱っており、厳密に適用できる基準がないため、品質のために処理する必要があります。データは整数、浮動小数点、または複雑な形式である可能性があり、これらのファイルを消去する必要があります。

入力データは textscan ですばやく数値に変換されますが、新しく作成された数値を文字列に変換しようとすると、時間がかかりすぎるようです (入力テキストを数値に変換するよりも 6 倍長くなります)。

現在、sprintf と textscan の組み合わせを使用して、精度を失うことなく double の数値配列を文字列のセル配列に変換しています。

numstr = sprintf(sprntffrmtstr, num);

vlnmcllnst = textscan(numstr,txtscnfrmtstr,'delimiter',' ');

vlcll = vlnmcllnst{1};

1 行目と 2 行目は、プロファイラーでかなりの時間を占めています。このスキームを for ループで使用して、入力テキストを数値に変換した textscan からの出力を処理します。各ループは数値の列ベクトルであり、numstr と vlnmcllnst の両方がループの前に事前に割り当てられています。

誰かがこれをスピードアップできますか?

編集: ここにアップロードされたファイル (2014 年 4 月 29 日でもアクセス可能!): http://www.2shared.com/file/ztVrvE0K/exampledata.html

これは 1 つのファイルの例です。一度に数千のこれらのファイルを処理して分析する場合がありますが、サイズの厳密な上限はありませんが、通常、サイズは 0 ~ 7 MB (4000 行) の間で異なります。データ チャネルは列ごとに大まかに編成されているだけで、一部のファイルではチャネルが欠落している可能性があり、新しいチャネルが追加されている可能性があります。ソースが異なるため、ファイルが変更される可能性のある標準に柔軟に対応する必要があることは確かです。この 1 つのファイルでのみ機能するソリューションは必要ありません。私の最終的な解決策は、ほとんどすべての「合法的な」.csv タイプのファイルで機能するはずです。ネイティブの MATLAB コードが十分な速度を提供できない場合、MATLAB から呼び出すことができる perl、C などで記述されたヘルパー型関数を使用する可能性を排除していません。

4

0 に答える 0