web-dev-qa-db-ja.com

MATLABでテキストファイルから行列を作成するにはどうすればよいですか?

4つの列を持つテキストファイルがあり、各列には65536のデータポイントがあります。行のすべての要素はコンマで区切られます。例えば:

X,Y,Z,AU
4010.0,3210.0,-440.0,0.0
4010.0,3210.0,-420.0,0.0
etc.

したがって、65536行があり、各行には上記のように4つのデータ値があります。行列に変換したいです。テキストファイルからExcelファイルにデータをインポートしてみました。そうすればマトリックスを簡単に作成できるためですが、データの半分以上が失われました。

9
Amit Jha

ファイル内のすべてのエントリが数値の場合は、a = load('file.txt')を使用するだけです。 65536x4のマトリックスaを作成する必要があります。 csvreadよりもさらに簡単です

22
Dima

'importdata'を使用してみたことがありますか?必要なパラメーターは、ファイル名と区切り文字のみです。

>> tmp_data = importdata('your_file.txt',',')

tmp_data = 

          data: [2x4 double]
      textdata: {'X'  'Y'  'Z'  'AU'}
    colheaders: {'X'  'Y'  'Z'  'AU'}


>> tmp_data.data

ans =

        4010        3210        -440           0
        4010        3210        -420           0

>> tmp_data.textdata

ans = 

    'X'    'Y'    'Z'    'AU'

Excelをいじる代わりに、テキストファイルをMATLABに直接読み取ることができるはずです(関数 [〜#〜] fopen [〜#〜][〜#〜]を使用) fgetl [〜#〜][〜#〜] fscanf [〜#〜] 、および [〜#〜] fclose [〜#〜] ):

fid = fopen('file.dat','rt');  %# Open the data file
headerChars = fgetl(fid);      %# Read the first line of characters
data = fscanf(fid,'%f,%f,%f,%f',[4 inf]).';  %'# Read the data into a
                                              %# 65536-by-4 matrix
fclose(fid);  %# Close the data file
8
gnovice

これを行う最も簡単な方法は、MATLABの csvread 関数を使用することです。

CSVファイルを読み取る this ツールもあります。

それほど難しいことなく自分でそれを行うこともできます。ファイルの各行をループし、コンマで分割して配列に配置するだけです。

7
David Johnstone

dlmread および textscan に精通することをお勧めします。

dlmreadcsvreadに似ていますが、任意の区切り文字(タブ、スペースなど)を処理できるため、csvreadではなく使用する傾向があります。

textscanは真の主力製品です。多くのオプションがあり、+開いているファイルで機能し、「不正な」入力(ファイル内の数値以外のデータなど)の処理に対して少し堅牢です。 gnoviceの提案ではfscanfのように使用できますが、より高速だと思います(ただし、引用しないでください)。

5
Jason S