#octave
#octave
Вопрос:
У меня есть файл данных (data.mat) в этом формате :
load('data.mat')
>> disp(X)
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 0
1 1 1 0
1 1 1 0
1 1 0 0
1 1 0 0
1 1 0 0
>> disp(y)
1
1
1
2
2
2
3
3
3
Я пытаюсь создать текстовые файлы данных, которые octave может преобразовать в .mat
xvalues.txt :
1, 1, 1, 1
1, 1, 1, 1
1, 1, 1, 1
1, 1, 1, 0
1, 1, 1, 0
1, 1, 1, 0
1, 1, 0, 0
1, 1, 0, 0
1, 1, 0, 0
yvalues.txt :
1
1
1
2
2
2
3
3
3
Чтобы дать указание Octave прочитать xvalues.txt в переменную X и yvalues.txt в переменную y я использую :
X = xvalues.txt
y = yvalues.txt
Является ли это идоматическим методом чтения файлов в Octave ? В какой-то момент эти файлы данных будут содержать 10 ^ 6 строк данных, есть ли более эффективный метод загрузки файлов данных?
Ответ №1:
В следующем коде каждый столбец файла xvalues считывается как отдельный вектор, затем объединяется в матрицу X:
[a,b,c,d] = textread("xvalues.txt", "%d %d %d %d", 'delimiter', ',', "endofline", "n");
X = [a, b, c, d];
[y] = textread("yvalues.txt", "%d", "endofline", "n");
disp(X);
disp(y);
Проверьте ссылку на textread
здесь
Ответ №2:
Нет необходимости конвертировать текстовые файлы. Вы можете использовать функцию dlmread()
:
data = dlmread(file, sep, r0, c0)
Считайте матричные данные из текстового файла, в котором используется разделитель
sep
между значениями данных.Если
sep
не определено, разделитель между полями определяется из самого файла.Учитывая два скалярных аргумента
r0
иc0
, они определяют начальную строку и столбец данных для чтения. Эти значения индексируются с нуля, так что первая строка соответствует нулевому индексу.
Итак, просто записываем
X = dlmread('xvalues.txt');
y = dlmread('yvalues.txt');
выполняет свою работу.
Обратите внимание, что Octave может определить разделитель ( ','
в вашем случае) из файла.