2016-07-17 32 views
0

私はmatlabで本当に新しいです。だから私は非常に基本的なことを学びたいと思っています。私は2004.07.01.0000.tsv、2004.07.01.0300.tsvのような名前の8つのtsvファイルを持っています。各ファイルは72行144列です。私は自動的にmatlabに平均、中央値、歪度(データ補正用)を計算するために行列形式でそれらのファイルをすべてインポートしようとしています。私がしたことは、matlab guiを使って1つのファイル(2004.07.01.0000.tsv)をインポートした後、importfileという関数を生成したことです。これらのファイルのすべてのデータにアクセスするためにforループを使用しようとしていますが、わかりませんでした。私は(すべてではわからない)試してみました:Matlabに複数のテキストファイルをインポートしてデータを解析する

for fileNum=1:8; 
startRow=1; 
endRow=72; 
filename 
a=importfile(filename, startRow, endRow); 
end 

答えて

0

あなたimportfile()機能を使用すると、最新のインポートされたファイルでaを上書きしますすべてのforループの反復において、このように、正常に動作する場合。代わりに、すべてのファイル(行列)を結合する必要があります。

行列の連結は、行(水平連結)または列(垂直連結)によって行うことができます。私が理解しているように、あなたは単一のファイルが含んでいるように144の列と多くの行を持つユニークな行列を生成するために垂直連結を必要とします。

垂直連結は、このようA=[B ; C]ような命令は、行列BCを連結することによって、マトリックスAを作成し、;オペレータによって行うことができる

myMatrix=[]; 
for fileNum=1:8; 
    startRow=1; 
    endRow=72; 
    filename 
    myMatrix=[myMatrix ; importfile(filename, startRow, endRow)]; 
end 

を次のようにこのように使用すると、ループを変更しなければなりません。あなたのケースでは、myMatrixを空に初期化してから、ファイルであるimportfile()のすべての出力を(反復的に)垂直方向に連結します。ループの終わりに

myMatrixMが144であるとNは、すべてのファイル(8 * 72)全体の行数の合計ですサイズNxMを持っている必要があります。

更新
あなたは、セルの各要素は、ファイル名である文字列のセル配列を作成することができますimportfile()関数に明示的にファイル名を渡す必要がある場合。あなたは適切なファイル名で、細胞内の文字列を置換する必要があり、明らかに

filenames={'filename1.tsv','filename2.tsv',...,'filename8.tsv'}; 

myMatrix=[]; 
for fileNum=1:8; 
    startRow=1; 
    endRow=72; 
    myMatrix=[myMatrix ; importfile(filenames{i}, startRow, endRow)]; 
end 

では、次のように最後に、あなたは少しループを編集することができます。したがって、我々の場合にはセル・アレイは、何かのようになりますこの方法では、ループの繰り返しごとにi番目のファイル名がimportfile()の入力として与えられ、うまくいけばロードされます。これが機能するために

あなたが同じフォルダにMATLABスクリプトと明らかに機能importfile()場所

  1. (のは、物事をシンプルにしましょう)すべきである
  2. あなた.TSVファイルを含むセットは、現在のフォルダとしてフォルダを言いました

を持っている場合。tsvファイルと別のフォルダ内のスクリプトを使用する場合は、現在のフォルダは必ずスクリプトを含むフォルダになり、セル配列内のファイル名はfilenamesに適切なファイル名だけでなくパス全体を含める必要があります。

+0

ありがとうAlessiox。私はそれを理解することができませんでした。なぜなら、matlabのGUIを使用して生成されたimportfile関数では、ファイル名がfilenameという単語を使用して2004.07.01.0000.tsvというファイルを参照していました。私の元の質問に記載されているように8ファイル。再び私は新しいので、私の無知をしてください。 –

+0

@RachidBrah答えを更新しました – Alessiox

+0

ファイル名= {'filename1.tsv'、 'filename2.tsv'、...、 'filename8.tsv'}; 私はそれを私のimportfile関数に入れて、エラーメッセージを返しました。 Alessiox、私はmatlab GUIを使用して関数を生成したことを忘れてしまいました。少し時間がある場合は、私のオリジナルの投稿を読んで、問題を段階的にアプローチしてください。私の問題は、自分のスクリプトを自分の関数に接続するだけでなく、おそらく関数自体の内容にも接続しているということです。本当にありがとう!ところで、関数、スクリプトは現在のフォルダにあります –

関連する問題