How to calculate Average without receiving 'Inf' as a result.
28 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mahnoor
el 9 de Oct. de 2024
Comentada: Star Strider
el 9 de Oct. de 2024
I am trying to find the average efficiency of this 1 column in MATLAB. I have tried N = mean(EstimatedEff,"omitnan") but get 'Inf' asa result. How can I change my code so I recieve a numerical figure for average efficiency? I have attached the Excel sheet below for reference and Using 2020b. Thankyou!
0 comentarios
Respuesta aceptada
Sameer
el 9 de Oct. de 2024
Editada: Sameer
el 9 de Oct. de 2024
Hi Mahnoor
It could be due to the presence of Inf values in your "EstimatedEff" array. The "omitnan" option only ignores NaN values, not Inf. To handle Inf values, you need to remove or replace them before calculating the mean.
You can modify the code as follows:
% Remove Inf values
EstimatedEff = EstimatedEff(~isinf(EstimatedEff));
% Calculate the mean, omitting NaN values
N = mean(EstimatedEff, 'omitnan');
Please refer to the below MathWorks documentation link:
Hope this helps!
1 comentario
Steven Lord
el 9 de Oct. de 2024
That would work if EstimatedEff is a vector or if you want the mean over the whole array. I'd probably use standardizeMissing to replace the Inf values with NaN and then use mean with 'omitnan' on that array (including specifying a dimension if necessary.)
EstimatedEff = randi(10, 5, 5);
nonfinitelocations = randperm(25, 10);
EstimatedEff(nonfinitelocations(1:4)) = NaN;
EstimatedEff(nonfinitelocations(5:7)) = Inf;
EstimatedEff(nonfinitelocations(8:10)) = -Inf
Replace all the Inf and -Inf values with NaN
E = standardizeMissing(EstimatedEff, [Inf, -Inf])
mean(E, "omitnan")
mean(E, 2, "omitnan")
mean(E, "all", "omitnan")
Más respuestas (2)
Star Strider
el 9 de Oct. de 2024
Uz = unzip('Matlab Copy.zip')
T1 = readtable(Uz{1}, 'VariableNamingRule','preserve')
NonZeros = nnz(T1{:,1})
NrInf = nnz(isinf(T1{:,1}))
NrNaN = nnz(isnan(T1{:,1}))
NrFinite = nnz(isfinite(T1{:,1}))
mean_of_finite_values = mean(T1{isfinite(T1{:,1}),:})
locs = isfinite(T1{:,1}); % Alternative Approach
NrNonfinite = nnz(~locs)
mean_of_finite_values = mean(T1{locs,:})
Of the 674835 values in the file, there are 0 NaN values, 29 are Inf and 674506 are finite.
.
1 comentario
Star Strider
el 9 de Oct. de 2024
Using the 'omitnan' flag is absolutely pointless in this instance!
The reason is that there are no NaN values at all, only Inf and finite values!
Aquatris
el 9 de Oct. de 2024
Here is one way:
% create dummy matrix
A = rand(100,1);
A([5 10 24 55 23 60]) = inf;
A([12 56 29 35]) = nan;
mean(A) % simple mean
mean(A,'omitnan') % omitting nan s
mean(A(~isinf(A)),'omitnan') % omitting nan and inf -inf
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!