Импорт данных из файла.txt в Matlab
Прежде всего, спасибо за чтение моего вопроса.
Я пытаюсь импортировать данные из файла в следующем формате в Matlab:
#Text
#Text: Number
...
#Text: Number
Set1:
1 2
3 4
Set2:
5 6
7 8
...
Я хотел бы получить эти числа в две матрицы вида:
(1 5
3 7)
а также
(2 6
4 8)
Я начал с построения только первой из этих двух матриц.
Winkel = 15;
xp = 30;
M = readtable('Ebene_1.txt')
M([1:4],:) = [];
M(:,3) = [];
for i=0:Winkel-1
A = table2array(M((2+i*31:31+i*31),1))
end
Но это решение дало мне только клеточные массивы, которые я не мог преобразовать в нормальные векторы.
Я также пытался использовать importdata
команда, но не смог найти способ заставить это работать. Я знаю, что есть много других вопросов, похожих на мои, но я не смог найти тот, где все данные были бы в одном столбце. Кроме того, есть много команд Matlab для импорта данных в Matlab, и я не уверен, что будет лучше.
Впервые задаю такой вопрос онлайн, поэтому не стесняйтесь спрашивать меня для более подробной информации.
1 ответ
Вы можете импортировать данные, которые вы предоставили в вашем образце, используя readtable, однако из-за формата вашего файла вам нужно будет немного подправить функцию.
Вы можете использовать detectImportOptions, чтобы сообщить функции, как импортировать данные.
%Detect import options for your text file.
opts = detectImportOptions('Ebene_1.txt')
%Specify variable names for your table.
opts.VariableNames = {'Text','Number'};
%Ignore last column of your text file as it does not contain data you are interested in.
opts.ExtraColumnsRule = 'ignore';
%You can confirm that the function has successfully identified that the data is numeric by inspecting the VariableTypes property.
%opts.VariableTypes
%Read your text file with detectImportOptions.
M = readtable('Ebene_1.txt',opts)
Теперь, когда у вас есть стол M
, просто примените основные операции Matlab, чтобы получить матрицы, как вы указали.
%Find numerical values in Text and Number variables. Ignore NaN values.
A = M.Text(~isnan(M.Text));
B = M.Number(~isnan(M.Number));
%Build matrices.
A = [A(1:2:end)';A(2:2:end)']
B = [B(1:2:end)';B(2:2:end)']
Выход:
A =
1 5
3 7
B =
2 6
4 8