0

私は、145 個の .csv ファイルを matlab にロードしようとしている新しい matlab ユーザーです。ファイルは似たような名前で、すべて 2 列 3000 行で構成されています。ファイルごとに列 1 と 2 を個別に操作し、それらをプロットできるようにする必要があります (列 2 と 1)。これまでのところ、次のことを試しました(すべてのファイルを含むフォルダーに対して):

clear ;
direc = dir('*.csv');               
for i=1:length(direc)               
  x = csvread(direc(i).name,1);     
end

私の x は 3000x2 double しかありませんが、3 番目の次元が必要です...そして「direc」フォルダーにアクセスする方法がわかりません。また、次の方法で、各ファイル エクストラの列 1 と 2 を定義しようとしました。

time(i,:,:)=x(:,:,1) and 
signal(i,:,:)=x(:,:,2)

そしてそれをプロットします。ただし、1 つのデータセット (1 ファイル) に対してのみプロットを返します。

誰かがそれを手伝ってくれますか?必要な情報をすべて提供したことを願っています。

ありがとう!

4

1 に答える 1

2

「「direc」フォルダーにアクセスする方法」(direc構造体配列であり、direc(index).fieldname意図したとおりに既にアクセスしています)が何を意味するのかわかりませんが、主な問題はforループで、すべての反復であると思いますx の以前の内容を上書きするので、最後に得られるのは、最後に読み取ったファイルの内容です。

すべてのcsvファイルの寸法がまったく同じ場合、必要なものは

x(:,:,i) = csvread(direc(i).name,1);

その後、すべての最初の列にアクセスできます-サイズ3000x1x145の3次元配列squeeze(x(:,1,:))のみが返され(上記の数値を使用)、より便利な3000x145マトリックスが生成されます。x(:,1,:)squeeze

すべてのcsvファイルの行数と列数が同じではない場合、セル配列を使用する必要があり、便利なインデックスを使用できません(ところでsignal(i,:,:)=x(:,:,2)、2次元xで本当に機能しましたか?)、またはゼロで埋めます、最終的に 3D アレイの大きさを見つけるために中間ステップが必要になる場合があります。

于 2011-05-26T13:48:57.387 に答える