配列の演算
6 views (last 30 days)
Show older comments
お世話になります。
3次元配列を、ページごとに違う値で割る計算をforループで行い、ループのすべての結果を格納しようとしていますが、結果がすべて同じ値になってしまいます。
具体的には、file_fig_t_yz(:,:,n)という3次元配列を、そのページごとの行と列の和であるfile_fig_sum_yz(:,n)で割り、ページごとの平均値を計算しMden_yz(:,n)にループのすべての結果を格納しようとしていますが、おそらくループの最後の結果のみがn個格納されてしまいます。
現在、書いているコードは以下の通りです。
Mden_yz=zeros(1,632)
n=1;
file_fig_t_yz=zeros(1109,1064,632);file_fig_sum_yz=zeros(1,632);
for i=1:632;
file_fig_t_yz(:,:,n)=boxes01(i-dif_x,1:ymax-ymin+1+dif_y,1:zmax-zmin+1+dif_z)-boxes00(i,1-dif_y:ymax-ymin+1,1-dif_z:zmax-zmin+1);
file_fig_sum_yz(:,n)=sum(sum(file_fig_t_yz(:,:,n)));
Mden_yz(:,n)=mean(mean(mean(file_fig_t_yz(:,:,n))/file_fig_sum_yz(:,n)));
n=n+1;
end
Matlab初心者なので色々問題あるかもしれないですが、アドバイスよろしくお願いいたします。
0 Comments
Accepted Answer
Atsushi Ueno
on 21 Jan 2023
Mden_yz(:,n) = mean(mean(mean(file_fig_t_yz(:,:,n))/file_fig_sum_yz(:,n)));
ここが意図しない動作の原因になっています。file_fig_t_yz(:,:,n)という3次元配列を、そのページごとの行と列の和であるfile_fig_sum_yz(:,n)で割る前に平均値を演算してしまっています。
Mden_yz(:,n) = mean(mean( ... % ← 平均値を自分で演算するのにmean関数を使うのはおかしい
mean(file_fig_t_yz(:,:,n)) ... % ←ここ 括弧の順番が違う。各要素を合計値で割る前にmean関数がある
/file_fig_sum_yz(:,n) ...
));
しかも、mean(file_fig_t_yz(:,:,n)) は、サイズが 1 ではない最初の配列の次元に沿った A の要素の平均値を返すのですが、入力が行列の場合は各列の平均値を含む行ベクトルを返します。つまり dim — 演算の対象の次元 のデフォルト値は1です。
直すなら下記の様に直すべきだと思います。
Mden_yz(n) = sum(sum(file_fig_t_yz(:,:,n)/file_fig_sum_yz(:,n)));
9 Comments
More Answers (0)
See Also
Categories
Find more on ループと条件付きステートメント in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!