Как я избавляюсь от NaNs в MATLAB?

У меня есть файлы, которые имеют много пустых ячеек, которые появляются как NaNs, когда я использую cell2mat, но проблема состоит в том, когда я должен получить средние значения, я не могу работать с этим, поскольку она показывает ошибку с NaN. В Excel это пропускает значения NaN, поэтому как я делаю то же в MATLAB?

Кроме того, я пишу использование файла xlswrite:

xlswrite('test.xls',M);

У меня есть данные во всех строках кроме 1. Как делают я пишу:

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

Другими словами, я хочу M(1,1)='time', M(1,2)='count', и так далее. У меня есть данные из M(2,1) кому: M(10,20). Как я могу сделать это?

5
задан gnovice 7 May 2017 в 04:50
поделиться

3 ответа

Используйте функцию isfinite, чтобы избавиться от всех NaN и бесконечностей

A = A (isfinite (A))

% создать массив ячеек, содержащий заголовки столбцов columnHeader = {'Столбец 1', 'Столбец 2', 'Столбец 3', 'Столбец 4', 'Столбец 5', ''};

% сначала пишут заголовки столбцов {{1} } xlswrite ('myFile1.xls', columnHeader);

% записывать данные непосредственно под заголовками столбцов xlswrite ('newFile.xls', M, 'Sheet1', 'A2');

7
ответ дан 18 December 2019 в 07:29
поделиться

Как правильно указывает 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

Другой альтернативой является использование некоторых функций из Statistics Toolbox (если у вас есть к нему доступ ), которые предназначены для работы с матрицами, содержащими значения 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



EDIT: Чтобы ответить на ваш дополнительный вопрос об использовании 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
9
ответ дан 18 December 2019 в 07:29
поделиться

Statistics Toolbox имеет несколько статистических функций для работы со значениями NaN. См. Nanmean, nanmedian, nanstd, nanmin, nanmax и т. Д.

5
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: