Как объединить разрозненные значения, загруженные textcan()?
Я загружаю какой-то текст с текстовым сканированием, и, хотя данные поступают, я хотел бы преобразовать эти данные в матрицу с плавающей точкой вместо формата чч: мм: сс.
Вот пример данных:
2010/01/01,00:00:00.979131, 27.4485, 51.9362, 14.8, 6 2010/01/01,00:00:01.021977, 27.5149, 51.9375, 16.0, 6 2010/01/01,00:00:01.074032, 27.4797, 51.9446, 14.5, 10 2010/01/01,00:00:01.663689, 25.8441,-152.8141, 14.6, 6 2010/01/01,00:00:01.639541, 25.8744,-152.6122, 1.5, 5 2010/01/01,00:00:02.232099, -2.2447, 11.5023, 18.8, 6 2010/01/01,00:00:02.256351, -0.8135, 27.3139, 17.7, 5 2010/01/01,00:00:02.306734, -2.7797, 28.5109, 26.0, 5 2010/01/01,00:00:02.620765, 25.6656,-154.2029, 26.2, 9 2010/01/01,00:00:02.658495, 25.6698,-154.2157, 23.0, 6 2010/01/01,00:00:02.731266, -5.7106, 126.4517, 3.6, 5 2010/01/01,00:00:02.787495, -5.7138, 126.5210, 24.4, 8 2010/01/01,00:00:02.811636, -3.2453, 124.6919, 21.1, 8 2010/01/01,00:00:02.917785, -5.6882, 126.4566, 4.9, 7 2010/01/01,00:00:02.568360, -0.5663, 27.0334, 21.1, 6 2010/01/01,00:00:03.693717, 33.5840, 152.1755, 14.7, 6
И вот мой код:
setenv GNUTERM 'x11';
fid = fopen('data.txt', 'r');
m = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ',');
%m = fscanf(fid, '%d/%d/%f');
a = [m{:,1}, m{:,2}, m{:,3}];
b = [m{:,4}, m{:,5}, m{:,6}]; %needs to contain a float
c = m{:,7};
d = m{:,8};
e = m{:,9};
f = m{:,10};
disp(b);
Также обратите внимание, что m{:,6} преобразуется в целые числа, что нежелательно. Цель состоит в том, чтобы b представляло собой одну строку или столбец чисел с плавающей точкой, которые можно объединить из того факта, что часы: минуты: секунды можно преобразовать в одно число от 0 до 23,999.
Спасибо за любой совет! JML
1 ответ
Решение
Использование cellfun
преобразовать все элементы ячейки в двойники:
m = cellfun(@double , m, 'UniformOutput', false);
тогда вы можете сделать матрицу из массива ячеек, используя cell2mat
:
m=cell2mat(m);