私はこのixjxk 3Dマトリックスを持っています(これは映画です)。ループなしで、各 ixj 配列のゼロ以外の正の要素の平均を取り、これらの値を 1x1xk 行列に入れようとしています。
私はかなり長い間探していました.2Dマトリックスでこれを達成するための解決策はたくさんありますが、ループを使用せずに3Dマトリックスでそれを行う方法を見つけることはできません.
私はこのixjxk 3Dマトリックスを持っています(これは映画です)。ループなしで、各 ixj 配列のゼロ以外の正の要素の平均を取り、これらの値を 1x1xk 行列に入れようとしています。
私はかなり長い間探していました.2Dマトリックスでこれを達成するための解決策はたくさんありますが、ループを使用せずに3Dマトリックスでそれを行う方法を見つけることはできません.
ループが必要ない場合は、各フレームの合計をゼロ以外の要素の数で割るだけです。
sum(sum(A))./sum(sum(A ~= 0))
負の数を取り除くには、最初A(A < 0) = 0
に tashuhka が指摘したように実行します
各画像 (フレーム) を配列に変換するとどうなるでしょうか。
% Remove negative and zero elements
A(A<=0) = 0;
% Convert each image into array
B = reshape(A,[Nimg,Nfrm]);
% Extract mean value of each image
C = mean(B,1);
ここNimg
で、 は各画像のピクセル数で、Nfrm
は画像の数です。
@Danが示唆するように、平均分母にゼロ以外の負の数を含めたくない場合は、次の行で結果をスケーリングします。
C_Dan = C.*squeeze(Nimg./sum(sum(A>0))).';