У меня есть файлы, которые имеют много пустых ячеек, которые появляются как 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)
. Как я могу сделать это?
Используйте функцию isfinite, чтобы избавиться от всех NaN и бесконечностей
A = A (isfinite (A))
% создать массив ячеек, содержащий заголовки столбцов columnHeader = {'Столбец 1', 'Столбец 2', 'Столбец 3', 'Столбец 4', 'Столбец 5', ''};
% сначала пишут заголовки столбцов {{1} } xlswrite ('myFile1.xls', columnHeader);
% записывать данные непосредственно под заголовками столбцов xlswrite ('newFile.xls', M, 'Sheet1', 'A2');
Как правильно указывает 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
Statistics Toolbox имеет несколько статистических функций для работы со значениями NaN. См. Nanmean, nanmedian, nanstd, nanmin, nanmax и т. Д.