ブロック処理

3 views (last 30 days)
宗樹 岡本
宗樹 岡本 on 31 Jan 2022
Commented: 宗樹 岡本 on 31 Jan 2022
ブロック処理に関しての質問です。
例えば、3×3でのブロック処理を行う際、NaNをのぞいた計算をするためfunctionでomitnanを使用したいと考えていますが、その時計算上分母の数は変わらないのですか?nanが含まれている箇所も分母は9になるのですか?それともnanが除外されるのですか?
初歩的な質問だと思いますが、ご教授お願い致します。
  2 Comments
Atsushi Ueno
Atsushi Ueno on 31 Jan 2022
具体的にどのToolboxの(またはMATLABの)何という関数について質問していますか?
宗樹 岡本
宗樹 岡本 on 31 Jan 2022
例えばですが、
fun = @(block_struct) ...
uint8(mean2(block_struct.data,[1 2],"omitnan")*...
ones(size(block_struct.data)));
I = blockprock(A,[3 3],fun]
このような際、nanを除外して3×3ずつブロック処理が行われると解釈しています。ですが、nanを含むブロックではどのような計算が行われているのかがわからないので、ご教授お願い致します。

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 31 Jan 2022
>計算上分母の数は変わらないのですか?nanが含まれている箇所も分母は9になるのですか?それともnanが除外されるのですか?
⇒NaNが除外され、残った数値の和を残った数値の個数で割った結果が得られます。
【解説】
blockproc関数はNaNの有無に関わらず一連の処理をするだけなので本質問にblockproc関数は無関係です。
「mean関数の'omitnan'オプションがどのように振る舞うのか?」という質問に帰結します。
mean2([1 2 3; 4 5 6; 7 8 NaN]) % mean2関数に'omitnan'オプションは設定不可
ans = NaN
mean([1 2 3; 4 5 6; 7 8 NaN], [1 2]) % mean2関数と同じ意味。NaNが含まれると結果もNaNになる
ans = NaN
mean([1 2 3; 4 5 6; 7 8 NaN], [1 2], 'omitnan') % 1+2+...+8 = 36, 36/4.5 = 8
ans = 4.5000
  1 Comment
宗樹 岡本
宗樹 岡本 on 31 Jan 2022
ご教授ありがとうございました。mean関数のNanについて知ることができました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!