change only those zeros to NaN if all in row are 0

조회 수: 5 (최근 30일)
Rahul
Rahul 2012년 6월 6일
I have
a =
1 2 3
0 0 0
2 1 0
4 5 0
0 0 0
2 0 1
I need
b =
1 2 3
NaN NaN NaN
2 1 0
4 5 0
NaN NaN NaN
2 0 1
i.e. only if all elements in row are 0 replace with NaN

채택된 답변

Thomas
Thomas 2012년 6월 6일
a(any(a,2)==0,:)=NaN;
b=a
  댓글 수: 3
per isakson
per isakson 2012년 6월 6일
Shouldn't that be *all*:
b( all(b, 2) == 0, :) = NaN
Image Analyst
Image Analyst 2012년 6월 6일
It works because any() looks for non-zeros, so it's only zero if there are no non-zeros, in other words, if they are all zeros. Perhaps my answer (not my comment above) might be more intuitive though - it used all().

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2012년 6월 6일
% Make a copy so we don't change a.
b=a
% Find out which rows are all zeros.
nonZeroRows = all(b == 0, 2)
% Assign all columns of the all-zero rows to nans.
b(nonZeroRows, :) = NaN

카테고리

Help CenterFile Exchange에서 NaNs에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by