% Laboratorio 3 % Nome e cognome clc clear all close all load ELSA % Esistono mille sinonimi di questa istruzione % Not a Number N_nan_tot = sum(isnan(elsa(:))); % """" x == NaN """" N_nan_tot_2 = length(find(isnan(elsa(:)))); % Inf N_inf_tot = sum(isinf(elsa(:))); % No negativi N_neg_tot = sum(elsa(:) < 0); % Media e varianza per colonne medie_delle_colonne = mean(elsa); % nanmean(elsa) varianza_delle_colonne = var(elsa); % nanvar(elsa) % Obiettivo: voglio usare nanmean senza problemi % Il mio problema sono i valori infiniti perché mi viene inf % Ho anche un altro problema: i valori negativi, che non danno problemi di % calcolo ma sono logicamente errati % Soluzione: "Li tolgo" ---> Prima li trasformo in Nan --> Poi lascio che % MATLAB gestisca i nan con la funzione nanmean % Questo mi dà le medie pulite % 1) Mettere NaN dove ci sono valori che "non ci piacciono" i_mask_non_ci_piacciono = isnan(elsa) | isinf(elsa) | (elsa < 0); elsa_2 = elsa; elsa_2(i_mask_non_ci_piacciono) = nan; % Con i NaN al posto degli inf e dei negativi % 2) Fare i conti medie_senza_nan_e_inf_e_neg = nanmean(elsa_2); % Troviamo le colonne con più del 20% di nan (missing, dati mancanti) N_nan_col = sum(isnan(elsa_2)); % Non srotoliamo => operazione per colonne perc_nan_col = N_nan_col / size(elsa_2, 1) * 100; % Indicizzando non si può togliere, solo "tenere" elsa_2_ridotta = elsa_2(:, perc_nan_col <= 20);