2

そのため、別の環境でデータを解析するスクリプトを作成し、それらのデータをファイルに出力しています。後で MATLAB に読み込みたいと考えています。ただし、たとえば 10 個のデータ セットを同じファイルに書き込むと (理想的な状況)、MATLAB は最初のデータ セットを読み取るだけです。輸入。ファイルの出力方法には多少の余裕はありますが、基本的には一行ずつ書けるようなシンプルなものである必要があります。

残念ながら、追加のデータ セットを列として追加するだけでは非常に困難です。サンプル データの例を次に示します。

DataSet1
x   y   z
3.82724 60.8234 13.0031
3.79987 60.909  -8.89291
3.75338 60.9124 19.5031
3.67715 61.0104 -24.5894
3.68124 61.0889 -20.8511
3.88438 61.1817 34.891
3.71405 61.2379 16.31
3.85504 61.245  -19.3778
4.09736 68.85   5.86954
3.39505 69.9457 64.8669
3.36033 69.9552 -58.8838
3.39427 70.9253 -26.0232
3.35769 70.9523 18.7863

DataSet2
x   y   z
3.73244 60.597  -21.6651
3.81217 60.712  -29.5505
3.74396 60.7554 -43.6225
3.70079 60.8271 -69.0996
3.87417 60.8662 -49.8068
3.74371 61.6553 34.915
3.815   61.7063 28.5842
3.88035 61.802  78.4314

理想的には、この種の構造を維持したいと考えています。私が見る最良の代替案は、多数の異なるファイルに書き込むこと (理想的ではありません)、またはそれを 1 つの長い配列に書き込み、そこに各データセットの開始位置を示すヘッダー情報を含めることです。繰り返しますが、理想的な状況ではありません。importdata() に似たものを使用する方法はありますか?

4

3 に答える 3

3

テキストスキャンを使用できます。非常に柔軟なので、あなたのケースに適応できると確信しています。サンプル データ セットのコードは次のとおりです。

C = textscan(fd, '%f%f%f', 'TreatAsEmpty', {'x y z', 'Dataset1', 'Dataset2'});

C は、%f ごとに 1 つずつ、double 値を持つ 3 つの列ベクトルのセルです。

>> C{1}

ans =

   NaN
   NaN
3.8272
3.7999
3.7534
....

ご覧のとおり、データセット セパレータがある場所では NaN が得られるため、データセットを簡単に分割できます。「文字列」データセット セパレータは、TreatAsEmpty パラメーターとして明示的に指定する必要があります (文字間に 1 つのスペースを含めるために、ここで「xy z」文字列を変更しました)。

于 2012-09-20T08:16:09.673 に答える
1

Matlabに付属するすべてのテキスト読み取り/インポートルーチンは、ファイルごとに1つのデータセットがあることを前提としています。おそらくいくつかのヘッダー行またはいくつかのランダムな欠落値または空白行がありますが、それはそれらの柔軟性のためのそれについてです。

これらのデータセットをインポートする場合はfgetl、ループで使用し、個々の行を解釈および解析して、(場合によっては新しい)セル配列に追加する独自のルーチンを作成する必要があります。

問題は次のようになります。データセットごとに1つずつ、複数のファイルの「醜さ」を取り除く価値のあるルーチンを作成するために費やす時間はどれくらいですか。

于 2012-09-20T05:07:45.453 に答える
0

可能であれば、テキストベースのデータの束縛から抜け出すことをお勧めします。

Matlab を使用してデータを生成する場合、いくつかの簡単なオプションがあります。たとえば、フラグを指定し てsaveコマンドを使用すると、ファイルに変数を追加できます。-append

save('someFileName.mat', 'Dataset1');  %Create a file with one variable
% ... do more work
save('someFileName.mat', 'Dataset1', '-append');  %Add another variable to the dataset

(2012a の時点で)matfileクラスを使用して個々の変数を操作することもできます。たとえば、

interfaceToFile = matfile('someFileName.mat','writable',true);
interfaceToFile.datasets = cell(100,1);
interfaceToFile.datasets(1,1) = {dataset1}; 
interfaceToFile.datasets(2,1) = {dataset2}; 

他の方法でデータを生成している場合は、HDF5 形式を検討します。C および Fortran プログラムで使用するために開発され、効率的な Matlab インターフェイスと、他の多くの言語での実装を備えています。

テキストが必要な場合は、他の回答のいずれかでおそらく十分です。

于 2012-09-20T19:40:10.047 に答える