Filling the gaps in a vector

4 visualizaciones (últimos 30 días)
joseph Frank
joseph Frank el 23 de En. de 2013
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]

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 23 de En. de 2013
Editada: Andrei Bobrov el 23 de En. de 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);

Más respuestas (3)

Image Analyst
Image Analyst el 23 de En. de 2013
Do you have the Image Processing Toolbox? If so, you can use imdilate, if you're clever about it.
  1 comentario
joseph Frank
joseph Frank el 23 de En. de 2013
Currently I don't but I will check with the university I think they have it

Iniciar sesión para comentar.


Azzi Abdelmalek
Azzi Abdelmalek el 23 de En. de 2013
Editada: Azzi Abdelmalek el 23 de En. de 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
Walter Roberson el 23 de En. de 2013
You might also be interested in John D'Errico's FEX contribution inpaint_nans

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by