replacing Nan with 0

43 views (last 30 days)
Caroline Prekker
Caroline Prekker on 25 Jul 2020
Commented: Walter Roberson on 10 Aug 2022
I have an excel file that I need to replace nan with zeros
I am using this piece of code and am getting error : Array indices must be positive integers or logical values
Error in "isnan(auPoints(r,c)) = 0;
I am not sure how to fix it or what I am doing wrong
for r = 4:1:22
for c = 2:1:29
if isnan(auPoints(r,c))

Answers (3)

Star Strider
Star Strider on 25 Jul 2020
Try this:
auPoints - fillmissing(auPoints, 'constant',0);
It might be advisable to save the output to a different variable, in order to preserve the original ‘auPoints’ matrix.
See the documentation for fillmissing (R2016b and later versions) for details.

madhan ravi
madhan ravi on 25 Jul 2020
Edited: madhan ravi on 25 Jul 2020
auPoints(isnan(auPoints(r, c))) = 0
madhan ravi
madhan ravi on 25 Jul 2020
Edited: madhan ravi on 26 Jul 2020
Well it’s assumed that c was within the bounds.
Try this: (OBSCURE)
auPoints = subsasgn(auPoints, substruct('()', {isnan(auPoints)}), 0)

Sign in to comment.

jonas on 25 Jul 2020
The line does not work because the left part just returns a logical.
isnan(auPoints(r,c)) = 0
It is similar to writing
isnan(NaN) = 0
...which makes no sense but returns the same error message
For this type of basic operation it is better to make use of logical indexing. For example, if you want to replace all your NaNs with zeros, you can write the following
mask = isnan(auPoints);
auPoints(mask) = 0;
The first line returns a logical array (1's and 0's) with the same size as the original array. This array is then used to index the original array. Faster and easier than loops.
More about logical indexing and indexing in general here.
Walter Roberson
Walter Roberson on 10 Aug 2022 like Star Strider suggests

Sign in to comment.


Community Treasure Hunt

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

Start Hunting!