Find all values in an array neighbored on both sides by NaN.

I have an array that looks like this:
A = [1 2 4 2 NaN 2 4 NaN 6 NaN NaN 9 5 NaN];
I would like to find all values in A that have a NaN immediately adjacent on both sides. In the example above, the only value that meets this criteria is the 6. I can do it in a loop like this:
ind = false(size(A));
for n = 2:length(A)-1
if isnan(A(n-1)) && isnan(A(n+1))
ind(n)=true;
end
end
Is there a more elegant way to do this?

 Akzeptierte Antwort

A = [1 2 4 2 NaN 2 4 NaN 6 NaN NaN 9 5 NaN];
A(conv(double(isnan(A)),[1 0 1],'same')==2)

2 Kommentare

Note, the for-loop is plenty elegant. It could be made more elegant by calling isnan once and then indexing into it on each iteration.
idx = isnan(A)
n = numel(A);
for ii = 1:n-2
if idx(ii) && idx(ii+2)
A(ii+1)
end
end
Convolution, of course! Thanks Sean.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Type Identification finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by