s = 1; %blort-cell counter
interpnum = cell(1,6);
for t = {East_u, North_v, Vert_w, VelError, Mag, DIR}
blort = t{1};
k = 1; %within blort-cell counter
for i = 1:length(SerYear)
badeast = find(isnan(blort(i,:)));
for j = 1:length(badeast)
m = badeast(j);
while isnan(blort(i, m))
if m > 1
m = m - 1;
else
break
end
end
n = badeast(j);
while isnan(blort(i, n))
if n < SerBins(end)
n = n + 1;
else
break
end
end
interpnum{s}(k, 1) = i;
interpnum{s}(k, 2) = badeast(j);
if n - m < 5 && ~isnan(blort(i, m)) && ~isnan(blort(i, n))
interpnum{s}(k, 3) = interp1([m n], [blort(i, m) blort(i, n)], badeast(j));
elseif n - m < 5 && isnan(blort(i, m)) && ~isnan(blort(i, n))
interpnum{s}(k, 3) = blort(i, n);
elseif n - m < 5 && ~isnan(blort(i, m)) && isnan(blort(i, n))
interpnum{s}(k, 3) = blort(i, m);
else
interpnum{s}(k, 3) = NaN;
end
k = k + 1;
end
clear badeast j m n
end
clear i blort k
s = s+1;
end
badeast = interpnum{1};
badnorth = interpnum{2};
badvert = interpnum{3};
baderr = interpnum{4};
badmag = interpnum{5};
baddir = interpnum{6};
clear s t interpnum
It looks at a big block of numbers, one row at a time, and interpolates for any missing values - assuming that there are no more than four missing in a row (in the row). It does this for six individual same-sized blocks.
It's in Matlab. There might actually be a simpler way to do this, but if so I don't know about it. (Obviously.) The fun part is: it only took me two days to work all that out. Leet skillz progress! :D

3 comments:
I'll trust you that it does what you say it does, but I like it because it's full of "blort".
Yes, that's one of my favorite parts too. :D
I like all the "badeast, badvert, badmag" stuff. It makes me think of Bad Horse and his terrible death whinny.
Post a Comment