配列の演算
6 次查看(过去 30 天)
显示 更早的评论
お世話になります。
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 个评论
采纳的回答
Atsushi Ueno
2023-1-21
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)));
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!