ignore NaN value in the matris

I want to ignore NaN values in my matrix. But I don't want it to sum or average the matrix. I just want it to operate with existing values, ignoring values that NaN in the matrix. Can you help me?

7 Commenti

That depends on what you want to do. The ‘omitnan’ or 'omitmissing' flags simply delete the NaN values before performing the calculation. If you are doing row-wise or column-wise calculations, that would likely be your best option as well, the doing the operation on each row or column in a loop.
If you are doing matrix calculations, removing the NaN values destroys the matrix architecture, so that is not an option. The best approach in that instance might be to interpolate the missing values. The interpolation method depends on where the NaN values are in the matrix (if they are at the row or column ends, 'nearest' would liely be the best option), and what you want to do with them.
Dyuman Joshi
Dyuman Joshi il 3 Nov 2023
Modificato: Dyuman Joshi il 3 Nov 2023
As mentioned earlier, what is the operation that you want to do/perform?
I have an Excel file with experimental results. However, some values in this file could not be calculated and were left as NaN. I made a modeling in Matlab and I will run that modeling with these values. The system gives an error because of NaN values. My wish is to ensure that the system passes through the system without valuing NaN values, deleting the values or changing them to 0.
Dyuman Joshi
Dyuman Joshi il 3 Nov 2023
Spostato: Dyuman Joshi il 16 Dic 2023
You can change the NaN values to 0 -
%let mat be your matrix
idx = isnan(mat);
mat(idx) = 0;
%or combined
mat(isnan(mat)) = 0;
On the basis of what you have already written here, what you want to do is likely impossible, given the constraints you are imposing.
Dyuman Joshi
Dyuman Joshi il 3 Nov 2023
Modificato: Dyuman Joshi il 7 Nov 2023
@Ali Topal, What error(s) do you get with NaN values?
Rik
Rik il 18 Dic 2023
If you explain what exactly you want to do, we might be able to suggest a solution. The constraints you describe make a solution impossible, so any solution will require breaking one of your requirements (but that might not actually be a problem).

Accedi per commentare.

Risposte (1)

There are a few ways to do this. Let's make an example vector with NaNs
x = rand(1,10);
x(1:4:end) = NaN
x = 1×10
NaN 0.7982 0.4286 0.0077 NaN 0.0374 0.5173 0.7096 NaN 0.2903
Now, for SUM, you probably just want to omit the NaNs using logical indexing.
x(~isnan(x)) % Returns only the non-NaN values
ans = 1×7
0.7982 0.4286 0.0077 0.0374 0.5173 0.7096 0.2903
sum(x(~isnan(x)))
ans = 2.7891
Or, you can use the nanflag parameter: nanflag
sum(x,"omitnan")
ans = 2.7891
Not every function has an "omitnan" flag, so the first example would work when that's not the case.

Prodotti

Tag

Richiesto:

il 3 Nov 2023

Risposto:

il 4 Gen 2024

Community Treasure Hunt

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

Start Hunting!

Translated by