Find row with NaN in it.

114 ビュー (過去 30 日間)
Artyom
Artyom 2014 年 8 月 17 日
コメント済み: sworland 2015 年 12 月 9 日
I have variable X.
X=[2 4 6;
4 5 NaN
3 NaN NaN
5 8 12
3 8 NaN];
How to find any row with NaN in it. ismember([3 8 NaN],X,'rows') gives me 0.
  1 件のコメント
Artyom
Artyom 2014 年 8 月 17 日
I mean how to find specific row in the matrix (for example 'find' [3 8 NaN] must return me [0;0;0;0;1];).

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

採用された回答

per isakson
per isakson 2014 年 8 月 17 日
編集済み: per isakson 2014 年 8 月 17 日
A start:
is(:,1) = X(:,1)==3;
is(:,2) = X(:,2)==8;
is(:,3) = isnan( X(:,3));
all( is, 2 )
which returns
ans =
0
0
0
0
1
AFAIK: isnan is the only way to spot NaN.
I don't think there is a magic one-liner. A little function along the example above is one way. Loop over all columns, ....

その他の回答 (3 件)

Guillaume
Guillaume 2014 年 8 月 17 日
[rows, columns] = find(isnan(X));
unique(row);
will give you the row indices
  1 件のコメント
sworland
sworland 2015 年 12 月 9 日
simple and fast, 1 upvote

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


Roger Stafford
Roger Stafford 2014 年 8 月 17 日
編集済み: Roger Stafford 2014 年 8 月 17 日
The code
t = any(isnan(X),2);
will return you a column vector of logicals in which each element is true if the corresponding row of X contains a NaN. I trust that would meet your needs. In your example you would get t = [false;true;true;false;true].

Andrei Bobrov
Andrei Bobrov 2014 年 8 月 17 日
編集済み: Andrei Bobrov 2014 年 8 月 17 日
X=[2 4 6;
4 5 NaN
3 NaN NaN
5 8 12
3 8 NaN];
с = [3 8 NaN];
z = [X;c];
z(isnan(z)) = max(z(:)) + 1;
out = ismember(z(1:end-1,:),z(end,:),'rows');
other example
X = randi(100,200,15);
X([5,125],[2,10]) = nan; % your array
c = X(5,:);
z = [X;c];
z(isnan(z)) = max(z(:)) + 1;
out = ismember(z(1:end-1,:),z(end,:),'rows');

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by