I have a large array of ocean climate data that contains many NaN values. I want to interpolate the neighbouring cells of the missing NaN cells, and replace that NaN cell with the mean of it's neighbouring cells that contain actual data.
I think it's best to do this an expanding circular fashion eg. if the nearest surrounding cells of the NaN cell only contain more NaN values, I want to take the second nearest circle of cells and so on, until numeric values are found.
So far, I have been following an answer from here:
A = [1 2 NaN; 3 NaN 5; 6 7 NaN]
A =
     1     2   NaN
     3   NaN     5
     6     7   NaN
A = padarray(A,[1 1],NaN) 
A =
   NaN   NaN   NaN   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN   NaN   NaN   NaN
   NaN   NaN     1     2   NaN   NaN   NaN
   NaN   NaN     3   NaN     5   NaN   NaN
   NaN   NaN     6     7   NaN   NaN   NaN
   NaN   NaN   NaN   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN   NaN   NaN   NaN
s=size(A);
N=length(s);
[c1{1:N}]=ndgrid(1:3);
c2(1:N)={2};
offsets=sub2ind(s,c1{:}) - sub2ind(s,c2{:})
offsets =
    -8    -1     6
    -7     0     7
    -6     1     8
L = find(isnan(A))   
neighbors = A(19+offsets)
neighbors =
   NaN     3   NaN
   NaN     6     7
   NaN   NaN   NaN
Advice on the following would be much appreciated:
1. How do I get the mean of the surrounding cells? EDIT (answer) below.
2. How can I do this to run over the whole matrix?