How can I determine the indices and length of consecutive non-NaN values in an array?

14 ビュー (過去 30 日間)
Say I have a vector A = [NaN NaN NaN 10 22 NaN 33 28 21 NaN 20 98 NaN], how do I:
1) determine the indices of consecutive non-NaN values; and
2) extract the count and length of these 'consecutive events'
Thank you!

採用された回答

Stephan
Stephan 2019 年 6 月 28 日
編集済み: Stephan 2019 年 6 月 28 日
1. FInd the indexes:
B = find(isnan(A))
2. To find consecutive blocks you could use the diff function on a logical array:
C = isnan(A) % gives a logical array
diff(C) % --> is different from zero, when a block changes (1 for start and -1 for end of block)
  2 件のコメント
Jonathan Macuroy
Jonathan Macuroy 2019 年 6 月 29 日
Hello, I think this is the simplest method. Thank you very much!
Stephen23
Stephen23 2019 年 6 月 29 日
Note that the code Stephan shows to "find consecutive blocks" will not detect when the non-NaN blocks occur at the ends of the vector.

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

その他の回答 (1 件)

Stephen23
Stephen23 2019 年 6 月 28 日
編集済み: Stephen23 2019 年 6 月 28 日
1)
>> A = [NaN NaN NaN 10 22 NaN 33 28 21 NaN 20 98 NaN];
>> find(~isnan(A))
ans =
4 5 7 8 9 11 12
or do you mean something else by "consecutive non-NaN values" ? Do you only want to get the indices at the beginning+end of each run of non-NaNs ?
2)
>> D = diff([false,~isnan(A),false]);
>> L = find(D<0)-find(D>0) % length
L =
2 3 2
>> N = numel(L) % count
N = 3
  1 件のコメント
Jonathan Macuroy
Jonathan Macuroy 2019 年 6 月 29 日
Hello! Thank you very much for your answer, yes I was referring to your second code. :)

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by