Загрузка файлов данных в переменные

#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 может определить разделитель ( ',' в вашем случае) из файла.