Как определить, является ли входное соотношение или число с плавающей запятой в 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