Импорт данных с инженерной нотацией в Matlab
У меня есть файл.xls, и я хочу импортировать его в Matlab с помощью функции xlsread. Я получаю NaN для чисел с инженерной нотацией. Как, например, я получаю NaN для 15.252 B или 1.25 M. Есть предложения?
Обновление: я могу использовать [num,txt,raw] = xlsread('...')
и именно то, что я хочу, но как я могу заменить M на (* 106)?
2 ответа
Сначала вы можете извлечь все из Excel в массиве ячеек, используя
[~,~,raw] = xlsread('MyExcelFilename.xlsx')
Тогда вы могли бы написать простую функцию, которая возвращает число из строки на основе "B", "M" и так далее. Вот такой пример:
function mynumber = myfunc( mystring )
% get the numeric part
my_cell = regexp(mystring,'[0-9.]+','match');
mynumber = str2double(my_cell{1});
% get ending characters
my_cell = regexp(mystring,'[A-z]+','match');
mychars = my_cell{1};
% multiply the number based on char
switch mychars
case 'B'
mynumber = mynumber*1e9;
case 'M'
mynumber = mynumber*1e6;
otherwise
end
end
Конечно, есть другие методы, чтобы отделить числовую строку от остальных, используйте то, что вы хотите. Для получения дополнительной информации см. regexp
документация. Наконец использовать cellfun
преобразовать массив ячеек в числовой массив:
my_array = cellfun(@myfunc,raw);
РЕДАКТИРОВАТЬ:
Matlab не предлагает никакого встроенного форматирования строк в инженерном формате.
Источник: http://se.mathworks.com/matlabcentral/answers/892-engineering-notation-printed-into-files
В источнике вы также найдете функцию, которая будет полезна для вас.