Pregunta

Tengo archivos que tienen muchas celdas vacías que aparecen como NaNs cuando uso cell2mat, pero el problema es cuando necesito para obtener los valores promedio no puedo trabajar con esto, ya que muestra un error con NaN. En Excel que da valores NaN, así que ¿cómo puedo hacer lo mismo en MATLAB?

Además, estoy escribiendo un archivo usando xlswrite:

xlswrite('test.xls',M);

Tengo datos en todas las filas excepto 1. ¿Cómo se escribe:

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

En otras palabras, quiero M(1,1)='time', M(1,2)='count', y así sucesivamente. Tengo datos de M(2,1) a M(10,20). ¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Utilice la función 'isFinite' para deshacerse de todos los infinitos y NaN

A = A (isFinite (A))

  

% crear la matriz celular que contiene los encabezados de columna   ColumnHeader = { 'Columna 1', 'Columna 2', 'Columna 3', 'Columna 4', 'Columna 5',' '};

     

% escribir los títulos de las columnas primera   xlswrite ( 'myFile1.xls', ColumnHeader);

     

% escribir los datos directamente debajo de los encabezados de columna   xlswrite ( 'newFile.xls', M 'Sheet1', 'A2');

Otros consejos

Como AP señala correctamente , puede utilizar la función isfinite para encontrar y mantener sólo valores finitos en su matriz. También puede utilizar la función isnan . Sin embargo, la eliminación de los valores de su matriz puede tener la consecuencia no deseada de la remodelación de su matriz en una fila o columna vector:

>> 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

Otra alternativa es utilizar algunas funciones de la Statistics Toolbox (si usted tiene acceso a ella) que están diseñados para tratar con matrices que contienen NaN valora . Ya que ha hablado de tomar promedios, es posible que desee comprobar hacia fuera 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: Para responder a su pregunta adicional sobre el uso de xlswrite , este código de ejemplo debe ilustrar una forma que puede escribir sus datos:

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 tiene varias funciones estadísticas para hacer frente a valores NaN. Ver nanmean, nanmedian, nanstd, nanmin, nanmax, etc.

Puede establecer NaN de a un número arbitrario de esta manera:

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

Puede ser demasiado tarde, pero ...

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top