Импорт данных с инженерной нотацией в 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

В источнике вы также найдете функцию, которая будет полезна для вас.

Другие вопросы по тегам