配列の演算

6 visualizzazioni (ultimi 30 giorni)
Uka
Uka il 21 Gen 2023
Commentato: Uka il 21 Gen 2023
お世話になります。
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初心者なので色々問題あるかもしれないですが、アドバイスよろしくお願いいたします。

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 21 Gen 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 Commenti
Uka
Uka il 21 Gen 2023
すみません、私も計算の意味を考えなおします。
ご丁寧なアドバイス、誠にありがとうございます。
配列の要素を、配列の合計値で割り、要素ごとに合計値との比を出すことが目的です。とりあえず以下のように書き換えました。ページごとの平均値をページごとの和で割りたいので引き続き検討します。
for i=1:632;
file_fig_t_yz(:,:,i)=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(i)=sum(sum(file_fig_t_yz(:,:,i)));%ページごとの和
end
Mden_yzB=mean(mean(file_fig_t_yz,1),2); %ページごとの平均値
Mden_yzC=squeeze(Mden_yzB);
Uka
Uka il 21 Gen 2023
アドバイスいただいてから、色々計算の意味などを見直し、無事解決致しました。誠にありがとうございます!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su ループと条件付きステートメント in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!