Как определить, является ли входное соотношение или число с плавающей запятой в Matlab?

Мне нужно для пакетной обработки текстовых файлов смешанных единиц, то есть целочисленных отношений и чисел с плавающей запятой (которые представляют собой масштабированные логарифмические приближения неизвестных рациональных или иррациональных чисел). Как Matlab может определить, какой вход какой? Будет ли сканирование для "." или символ '/' будет лучшим?

252,63

4/3

757,89

2/1

В этом примере я узнаю, что числа представляют значения в возрастающем порядке (но в смешанных единицах, что типично для моей области обучения), и я обработал бы 252,63 и 757,89 иначе, чем 4/3 и 2/1.

Я не нашел такой функции в Matlab, как isa(x, 'rat') где x - любая из строк в приведенном выше списке, а "rat" - это отношение.

2 ответа

Решение

Matlab может довольно просто искать строки для определенных символов.

slashmask     = str == '/'; % returns false for every character in str that's not a slash, and true for every one that is.
slashdetected = any(slashmask); % returns false if no character is a slash.

если все, что вам нужно сделать, это взять соотношение и оценить его, а затем использовать его так же, как с плавающей точкой, вы можете просто использовать функцию "eval" для получения эквивалента с плавающей точкой.

Спасибо за ваши советы. С вашей помощью я остановился на этом (в каждой строке файла данных):

x = fgetl(fileId);
if isnan(str2double(x)) == true
    % Interpret string as ratio number
    x = str2num(x);
    % then convert to musical cents,
    s(i) = log(x) / log(2) * 1200;
else
    % convert string to float, already in cents.
    s(i) = str2double(x);
end
Другие вопросы по тегам