If you want to replace a scalar based on a 3D array, you either need 3 `nanmean` calls:

nanmean(nanmean(nanmean(data(i-1:i+1, j-1:j+1, k-1:k+1))))

with i-1:i+1, instead of i-2:i+2. This would be easier:

if isnan(data(i,j,k)) % "== 1" is not needed tmp = data(i-1:i+1, j-1:j+1, k-1:k+1); % 3D block data(i,j,k) = nanmean(tmp(:)); % Make it a vector end

But this is a 3x3x3 neighborhood with 27 elements, not 8. I assume you mean:

if isnan(data(i,j,k)) % "== 1" is not needed tmp1 = data(i-1:i+1, j, k); tmp2 = data(i:i, j-1:j+1, k); tmp3 = data(i, j, k-1:k+1); tmp = [tmp1(:); tmp2(:); tmp3(:)]; % Create a vector data(i,j,k) = nanmean(tmp); end

Because the center point `data(i,j,k)` is included 3 times, but ignored by `nanmean`, you have 6 neighbors now, not 8.

So please explain again, what you exactly want.

## 0 Comments

Sign in to comment.