Selection of priority data

4 次查看(过去 30 天)
Hello,
I'm trying to solve a problem. I have a vector of data such as:
data=[3;4;8;NaN;NaN;NaN;7;4;3;NaN;NaN;2;3;NaN;9]
length of data can be variable and NaN value phases can happen everywhere within a vector.
I need to find the first NaN value and count the number of next NaN. However, I do not want to take into account any other NaN value after the first portion of NaN.
In this case my result would be: First NaN at raw 4. Three NaN values. I know how to use the function find, indeed this is the code I used as far:
findNaN = find(isnan(data));
The problem is that in that way I will get the others NaN too that I do not want to locate.
Any idea?
Thanks, Giuseppe

采纳的回答

Shoaibur Rahman
Shoaibur Rahman 2014-12-27
data=[3;4;8;NaN;NaN;NaN;7;4;3;NaN;NaN;2;3;NaN;9];
findNaN = find(isnan(data));
first = findNaN(1);
numberNaN = 1;
for k = first+1:length(data)
if isnan(data(k))
numberNaN = numberNaN+1;
else break
end
end
first, numberNaN

更多回答(2 个)

Image Analyst
Image Analyst 2014-12-27
If you're lucky enough to own the Image Processing Toolbox, it's easy. Just find the nan's, label then, and count the number in the first group. Here is the code:
labeledVector = bwlabel(isnan(data)) % Find nan's and label.
numberOfNansInFirstGroup = sum(labeledVector == 1) % Count the # of elements in group #1

Giuseppe
Giuseppe 2014-12-27
thanks for helping to improve my code

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by