how to do convolution of two arrays in 3d?
3 ビュー (過去 30 日間)
古いコメントを表示
hi everyone
i am trying to do convolution between a 371x391x23 and 371x391x23 array. however when i used convn, the output which i got had only Nan values in it. one of the input array has some Nan values in it. is it because of that the output also became Nan? kindly help me to solve it.
0 件のコメント
回答 (2 件)
Walter Roberson
2021 年 12 月 27 日
Yes, a single nan can pollute more than 95% of the output of a matrix with those dimensions, if it happens to be at the center of the array.
There is pretty much no point is doing a convolution with nan values present
2 件のコメント
Walter Roberson
2021 年 12 月 27 日
No. If you look at the formula at https://www.mathworks.com/help/matlab/ref/convn.html#bvg3kvh-9 then note that every A value is involved in the computation so if one of them is nan then at least one individual multiplication gives a nan result. But there is the summation over all of the values, and so nan is certain to be involved somewhere in the summation, so you are going to get nan as the result for all locations (except perhaps at some border locations.)
Matt J
2021 年 12 月 27 日
編集済み: Matt J
2021 年 12 月 28 日
Consider overwriting the NaNs with zeros
A(isnan(A))=0;
or more sophisticated missing data inpainting routines offered on the file exchange, e.g.,
2 件のコメント
Walter Roberson
2021 年 12 月 28 日
Note that putting in any finite numeric value is going to change the entire meaning of the convolution.
A = magic(8)
B = A.'
C1 = conv2(A, B, 'same')
A(4,4) = nan;
C2 = conv2(A, B, 'same')
A(4,4) = 0;
C3 = conv2(A, B, 'same')
A(4,4) = 1;
C4 = conv2(A, B, 'same')
sum(C4-C3, 'all')
sum(A, 'all'), sum(B, 'all')
... I can't see any obvious simple relationship
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!