Make all elements of given row numbers equal to NaN.

3 views (last 30 days)
Given a matrix, if any element has a non-finite value, I want to make all elements of that row equal to NaN. For example:
Input:
A=[1 2 NaN
4 5 6
7 NaN 9
0 1 2
3 4 5
6 7 8
Inf 0 1
2 3 4
5 6 7
8 NaN 0];
Output:
B=[NaN NaN NaN
4 5 6
NaN NaN NaN
0 1 2
3 4 5
6 7 8
NaN NaN NaN
2 3 4
5 6 7
NaN NaN NaN];
How can this be done?
This is how I know:
idx_NaNinf = find((isnan(A)|isinf(A)) );
[idx_row,idx_col] = ind2sub(size(A),idx_NaNinf);
With all row numbers stored in idx_row and by using a for loop, I can make the elements of that row equal to NaN. But is there any other more efficient method?

Accepted Answer

per isakson
per isakson on 6 Oct 2015
Edited: per isakson on 6 Oct 2015
I guess this is more efficient, and I think it's more readable
B = A;
is_nan_row = any( isnan( A ), 2 );
is_inf_row = any( isinf( A ), 2 );
B( (is_nan_row|is_inf_row), : ) = nan;
  2 Comments
Meghana Dinesh
Meghana Dinesh on 6 Oct 2015
As an extension, if all columns of a row are zeros, I want to make the entire row NaN. How can I do this?
Input:
[0 0 1
0 0 0
7 8 0
0 0 0
8 9 0
0 0 0
0 0 0];
Output required:
[0 0 1
NaN NaN NaN
7 8 0
NaN NaN NaN
8 9 0
NaN NaN NaN
NaN NaN NaN];

Sign in to comment.

More Answers (0)

Tags

Products

Community Treasure Hunt

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

Start Hunting!