Filter löschen
Filter löschen

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

5 Ansichten (letzte 30 Tage)
Rahul
Rahul am 6 Jun. 2012
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

Akzeptierte Antwort

Thomas
Thomas am 6 Jun. 2012
a(any(a,2)==0,:)=NaN;
b=a
  3 Kommentare
per isakson
per isakson am 6 Jun. 2012
Shouldn't that be *all*:
b( all(b, 2) == 0, :) = NaN
Image Analyst
Image Analyst am 6 Jun. 2012
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().

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Image Analyst
Image Analyst am 6 Jun. 2012
% 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

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by