Эффективный способ реализации, а не структуры в Matlab - PullRequest
0 голосов
/ 20 декабря 2011

Я читаю некоторые данные из CSV-файла или текстового файла (который состоит из тысяч строк, причем каждая строка состоит из фиксированного числа столбцов - например, 20).

Я храню вышеупомянутые данные в matlabсо структурой следующим образом.

initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = [];
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = [];

initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = val1;
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = val2;

где first, sec, thir, val1, val2 заполнены из текстового файла csv /.Доступно несколько полей, кроме time и scan, но я их здесь не включил.

При запуске программы выдается предупреждение

Переменная initial_var, кажется, меняет размер на каждой итерации цикла.Рассмотрим предварительное распределение для скорости.

Я знаю, что это можно решить путем предварительного распределения и инициализации.

Но мой вопрос здесь заключается в том, что является лучшим способом хранения вышеуказанных данных, а не вышеупомянутого типа структуры?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Эти строки ничего не сделают:

initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = [];
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = [];

Это означает «удалить строку после конца этого массива».

Возможно, вы захотите взглянуть на многомерныйструктура:

vars(firs,sec,thr).time(end+1, :) = val1
vars(firs,sec,thr).scan(end+1, :) = val2

Инициализировать тоже должно быть проще.

Кроме того, при загрузке данных вы можете посмотреть textscan.

0 голосов
/ 20 декабря 2011

Как правило, самый быстрый и гибкий способ чтения данных - fscanf.(См. Также csvread для удобной оболочки для файлов CSV.) Например:

data = randn(1e4, 20);
save data.txt data -ASCII

tic
h = fopen('data.txt')
data_read = fscanf(h, '%f');
data_read = reshape(data_read, 1e4, []);
toc
Elapsed time is 0.089097 seconds.

Если все данные являются числовыми, то их быстрее всего хранить и работать с простыми матрицами.

Кроме того, если вы опубликуете некоторые конкретные данные и воспроизводимый код, мы могли бы дать более конкретные ответы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...