如何在MATLAB中摆脱NaN?

Pau*_*aul 5 excel matlab nan

我有一些文件有许多空单元格,当我使用时显示为NaNs cell2mat,但问题是当我需要得到平均值时我无法使用它,因为它显示NaN的错误.在excel中它忽略了NaN值,那么我如何在MATLAB中做同样的事情呢?

另外,我正在使用xlswrite以下方法编写文件:

xlswrite('test.xls',M);
Run Code Online (Sandbox Code Playgroud)

我的所有行都有数据,除了1.我怎么写:

M(1,:) = ('time', 'count', 'length', 'width')
Run Code Online (Sandbox Code Playgroud)

换句话说,我想要M(1,1)='time',M(1,2)='count'等等.我从数据M(2,1)M(10,20).我怎样才能做到这一点?

gno*_*ice 9

正如AP正确指出的那样,您可以使用该函数isfinite在矩阵中查找并保留有限值.您也可以使用该功能isnan.但是,从矩阵中删除值可能会导致将矩阵重新整形为行或列向量的意外后果:

>> 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
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用统计工具箱中的一些函数(如果您有权访问它们),这些函数用于处理包含NaN值的矩阵.由于你提到平均值,你可能想看看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
Run Code Online (Sandbox Code Playgroud)



编辑:要回答有关使用的其他问题xlswrite,此示例代码应说明您可以编写数据的一种方法:

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
Run Code Online (Sandbox Code Playgroud)


AP.*_*AP. 7

使用'isfinite'函数来消除所有NaN和无穷大

A = A(ISFINITE(A))

%创建包含列标题的单元格数组columnHeader = {'Column 1','Column 2','Column 3','Column 4','Column 5','}};

%首先写下列标题xlswrite('myFile1.xls',columnHeader);

%直接在列标题xlswrite('newFile.xls',M,'Sheet1','A2')下面写入数据;


yuk*_*yuk 5

Statistics Toolbox有几个统计函数来处理NaN值.参见nanmean,nanmedian,nanstd,nanmin,nanmax等.