Question

J'ai des fichiers qui ont beaucoup de cellules vides qui apparaissent comme NaN quand je l'utilise cell2mat, mais le problème est quand j'ai besoin pour obtenir les valeurs moyennes, je ne peux pas travailler avec cela comme il montre l'erreur avec NaN. Dans Excel, il donne des valeurs NaN, alors comment puis-je faire la même chose dans Matlab?

De plus, je suis en train d'écrire un fichier en utilisant xlswrite:

xlswrite('test.xls',M);

J'ai données dans toutes les lignes sauf 1. Comment puis-je écrire:

M(1,:) = ('time', 'count', 'length', 'width')

En d'autres termes, je veux M(1,1)='time', M(1,2)='count', et ainsi de suite. J'ai des données de M(2,1) à M(10,20). Comment puis-je faire?

Était-ce utile?

La solution

Utilisez la fonction « isfinite » pour se débarrasser de tous NaN et infinités

A = A (isfinite (A))

  

% créer la matrice de cellules contenant les en-têtes de colonne   ColumnHeader = { 'Colonne 1', 'Colonne 2', 'colonne 3', 'Colonne 4', 'colonne 5', » « };

     

% écrire les en-têtes de colonne premier   xlsEcriture ( 'myFile1.xls', ColumnHeader);

     

% écrire les données directement sous les en-têtes de colonne   xlsEcriture ( 'newFile.xls', M, 'Sheet1', 'A2');

Autres conseils

Comme AP souligne à juste titre , vous pouvez utiliser la fonction isfinite pour trouver et conserver uniquement des valeurs finies dans votre matrice. Vous pouvez également utiliser la fonction isnan . Toutefois, la suppression des valeurs de votre matrice peut avoir pour conséquence inattendue de remodeler votre matrice dans un vecteur de ligne ou de colonne:

>> mat = [1 2 3; 4 NaN 6; 7 8 9]  % A sample 3-by-3 matrix

mat =

     1     2     3
     4   NaN     6
     7     8     9

>> mat = mat(~isnan(mat))  % Removing the NaN gives you an 8-by-1 vector

mat =

     1
     4
     7
     2
     8
     3
     6
     9

Une autre alternative est d'utiliser certaines fonctions du Statistics Toolbox (si vous avez accès) qui sont conçus pour traiter avec des matrices contenant NaN valeurs . Puisque vous évoquez en prenant la moyenne, vous pouvez consulter nanmean :

>> mat = [1 2 3; 4 NaN 6; 7 8 9];
>> nanmean(mat)

ans =

     4     5     6     % The column means computed by ignoring NaN values


EDIT: Pour répondre à votre question supplémentaire sur l'utilisation de xlswrite , cet exemple de code devrait illustrer une façon que vous pouvez écrire vos données:

C = {'time','count','length','width'};  % A cell array of strings
M = rand(10,20);                        % A 10-by-20 array of random values
xlswrite('test.xls',C);           % Writes C to cells A1 through D1
xlswrite('test.xls',M,'A2:T11');  % Writes M to cells A2 through T11

Statistics Toolbox a plusieurs fonctions statistiques pour traiter les valeurs NaN. Voir nanmean, nanmedian, nanstd, nanmin, nanmax, etc.

Vous pouvez définir NaN de un nombre arbitraire comme ceci:

mat(isnan(mat))=7 // my lucky number of choice. 

Peut-être trop tard, mais ...

x = [1 2 3; 4 inf 6; 7 -inf NaN];
x(find(x == inf)) = 0; //for inf
x(find(x == -inf)) = 0; //for -inf
x(find(isnan(x))) = 0; //for NaN
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top