Filling the gaps in a vector
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have a vector of nans
A=[nan;nan;2;nan;4;nan;nan;nan;7;nan;nan;nan;nan] how can I fill the nan gaps by the closest number (for beginning and mid values it is the closest upper;for the last values it is the closest lower value). i,e how can reproduce the vector to become A=[2;2;2;4;4;7;7;7;7;7;7;7;7]
0 Kommentare
Akzeptierte Antwort
Andrei Bobrov
am 23 Jan. 2013
Bearbeitet: Andrei Bobrov
am 23 Jan. 2013
A=[nan;nan;2;nan;4;nan;nan;nan;7;nan;nan;nan;nan];
b = ~isnan(A);
k = cumsum(flipud(b));
k(k==0) = 1;
n = flipud(A(b));
s = n(k);
out = flipud(s);
or
t = ~isnan(A);
k = find(t) + 1;
z = zeros(size(A));
z(k(k <= numel(A))) = 1;
q = cumsum(z) + 1;
q(q > nnz(t)) = max(q) - 1;
p = A(t);
out = p(q);
0 Kommentare
Weitere Antworten (3)
Image Analyst
am 23 Jan. 2013
Do you have the Image Processing Toolbox? If so, you can use imdilate, if you're clever about it.
Azzi Abdelmalek
am 23 Jan. 2013
Bearbeitet: Azzi Abdelmalek
am 23 Jan. 2013
A=[nan;nan;2;nan;4;nan;nan;nan;7;nan;nan;nan;nan]
B=A;
idx=find(isnan(A));
idx1=fliplr(find(~isnan(A)));
for k=1:numel(idx)
a=idx(k);
[~,ii]=min(abs(a-idx1));
B(idx(k))=A(idx1(ii));
end
Walter Roberson
am 23 Jan. 2013
You might also be interested in John D'Errico's FEX contribution inpaint_nans
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!