Pergunta

Eu tenho arquivos que têm muitas células vazias que aparecem como Nans quando eu uso cell2mat, mas o problema é quando preciso obter os valores médios que não posso trabalhar com isso, pois mostra erros com a NAN. No Excel, tem vista para os valores da NAN, então como faço o mesmo no Matlab?

Além disso, estou escrevendo um arquivo usando xlswrite:

xlswrite('test.xls',M);

Eu tenho dados em todas as linhas, exceto 1. Como escrevo:

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

Em outras palavras, eu quero M(1,1)='time', M(1,2)='count', e assim por diante. Eu tenho dados de M(2,1) para M(10,20). Como posso fazer isso?

Foi útil?

Solução

Use a função 'isfinite' para se livrar de todas as nan e infinidades

A = a (isfinite (a))

%Crie a matriz de células que contém os cabeçalhos da coluna ColumnHeader = {'Coluna 1', 'Coluna 2', 'Coluna 3', 'Coluna 4', 'Coluna 5', ''};

%Escreva os cabeçalhos da coluna First xlswrite ('myfile1.xls', columnheader);

% Escreva os dados diretamente abaixo dos cabeçalhos da coluna xlswrite ('newfile.xls', m, 'sheet1', 'A2');

Outras dicas

Como AP aponta corretamente, você pode usar a função isfinite Para encontrar e manter apenas valores finitos em sua matriz. Você também pode usar a função isnan. No entanto, a remoção de valores da sua matriz pode ter a conseqüência não intencional de reformular sua matriz em uma linha ou vetor de coluna:

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

Outra alternativa é usar algumas funções do Estatística caixa de ferramentas (se você tiver acesso a ele) que são projetados para lidar com matrizes contendo valores de nan. Como você menciona as médias de ter as médias, você pode querer conferir 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



EDITAR: Para responder sua pergunta adicional sobre o uso de xlswrite, Este código de amostra deve ilustrar uma maneira de escrever seus dados:

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

O Statistics Toolbox possui várias funções estatísticas para lidar com os valores da NAN. Veja Nanmean, Nanmedian, Nanstd, Nanmin, Nanmax, etc.

Você pode definir o NAN's para um número arbitrário como assim:

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

Pode ser tarde demais, mas ...

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top