Filling the gaps in a vector

7 ビュー (過去 30 日間)
joseph Frank
joseph Frank 2013 年 1 月 23 日
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]

採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 1 月 23 日
編集済み: Andrei Bobrov 2013 年 1 月 23 日
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);

その他の回答 (3 件)

Image Analyst
Image Analyst 2013 年 1 月 23 日
Do you have the Image Processing Toolbox? If so, you can use imdilate, if you're clever about it.
  1 件のコメント
joseph Frank
joseph Frank 2013 年 1 月 23 日
Currently I don't but I will check with the university I think they have it

サインインしてコメントする。


Azzi Abdelmalek
Azzi Abdelmalek 2013 年 1 月 23 日
編集済み: Azzi Abdelmalek 2013 年 1 月 23 日
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
  1 件のコメント
joseph Frank
joseph Frank 2013 年 1 月 24 日
there is one additional 4

サインインしてコメントする。


Walter Roberson
Walter Roberson 2013 年 1 月 23 日
You might also be interested in John D'Errico's FEX contribution inpaint_nans

カテゴリ

Help Center および File ExchangeGeology についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by