MATLAB Answers

連番名のcsvファイ​ルからforループ等​を使って標準偏差をも​とめたい

4 views (last 30 days)
H.O
H.O on 12 Aug 2020
Commented: H.O on 16 Aug 2020
プログラミング初心者です.
①ファイルは:N-1.csv, N-2.csv, N-3.csv, , N-4.csv,, N-5.csv, N-6.csv・・・・N-9.csv
  の連番で,すべて29X29の行列です.
②1セットを3枚(N)とし,5セット(cyc)の平均(Dave)と偏差(平均との差),標準偏差を求めようとしています.
③統計処理で対応するファイルは,3枚とびなのでそれぞれ
 N-1.csv, N-4.csv, N-7.csv,  ・・・1セット目.これに平均・標準偏差の処理をして,29X29の行列Na-1.csv として保存
N-2.csv, N-5.csv, N-8.csv, ・・・2セット目.これに平均・標準偏差の処理をして,29X29の行列Na-2.csv として保存
N-3.csv, N-6.csv, N-9.csv, ・・・3セット目.これに平均・標準偏差の処理をして,29X29の行列Na-3.csv として保存
 ・・・5セットまで実行します.
④”平均”や標準偏差は行列 要素(mean、std)でなく,同じサイズの複数の行列間 との演算です.
⑤標準偏差は,エクセル関数STDEV.Pに該当するものとします.
平均処理ができたプログラムは以下です.※実際には扱うファイル数が多いため変数を使用して作成しています.
同様に偏差,標準偏差の処理を行いたいのでご教示頂けませんでしょうか.
matlab2013で機能が乏しい場合は2019でも大丈夫です.
宜しくお願い致します.
data = zeros(29,29);
n= N*cyc
for a=1:N % N=3 ...3枚飛びを指定
Dsum=0;
for number = a:N:n
num = num2str(number);
data= xlsread(['絶対パス\N-' num '.csv']);
%1セット分の平均を求める
Dsum = Dsum + data ;
Dave=Dsum/cyc ; %平均
No=num2str(a);
xlswrite(['絶対パス\Na-' No '.csv'],Dave); %CSVファイルとして連番保存
contourf(Dave,200,'LineStyle','none'); %カラーの分布画像にする
end
end

  2 Comments

Kenta
Kenta on 14 Aug 2020
偏差や標準偏差を求める関数があります。ネットで、「matlab 標準偏差」などと調べてみてはいかがでしょうか。
H.O
H.O on 14 Aug 2020
閲覧頂きありがとうございます。検討継続致します。

Sign in to comment.

Accepted Answer

Kenta
Kenta on 15 Aug 2020
clear;clc
cyc=5;
N=3;
n=N*cyc;
for a=1:N % N=3 ...3枚飛びを指定
Dsum = [];
for number = a:N:n
num = num2str(number);
% data= xlsread(['絶対パス\N-' num '.csv']);
data=rand(29); % データがないので乱数で29×29の行列を作成
%1セット分の平均を求める
Dsum = cat(3,Dsum,data);
end
% Dave=Dsum/cyc ; %平均
Dave=mean(Dsum,3);
Dstd=std(Dsum,[],3);
% No=num2str(a);
% xlswrite(['絶対パス\Na-' No '.csv'],Dave); %CSVファイルとして連番保存
% contourf(Dave,200,'LineStyle','none'); %カラーの分布画像にする
end
こんにちは、少しコードを修正しました。5セット分繰り返すのならはじめのfor a=1:Nは、for a=1:cycな気がしますがいかがでしょうか?ひとまずそのままにしています。ただ、
  • N-1.csv, N-4.csv, N-7.csv,  ・・・1セット目.これに平均・標準偏差の処理をして,29X29の行列Na-1.csv として保存
  • N-2.csv, N-5.csv, N-8.csv, ・・・2セット目.これに平均・標準偏差の処理をして,29X29の行列Na-2.csv として保存
  • N-3.csv, N-6.csv, N-9.csv, ・・・3セット目.これに平均・標準偏差の処理をして,29X29の行列Na-3.csv として保存
とありますが、これを5セット繰り返すと例えば、N-7は、2度使われますが大丈夫なのでしょうか?
Daveも、奥行方向(Z方向)にデータを重ねて、最後にチャンネル方向に平均(または標準偏差)の計算をしました。あまり、質問の条件を汲み取れてないかもしれませんので、適宜変更を加えてください。

  1 Comment

H.O
H.O on 16 Aug 2020
ありがとうございます。 意図するものができました。質問して良かったです。
>N-7は、2度使われますが大丈夫なのでしょうか? 失礼しました、例が悪かったです。 実際にはcycよりNの方が数が大きいため同じファイルが2回以上使われることはありません。
とても助かりました。ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2013a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!