Я имею дело с очень большими данными в matlab и использовал для хранения этих данных в матрицах.Я имел обыкновение хранить свои данные по строкам, но поскольку Matlab хранит данные по столбцам, я понимаю, что изменение формы моей матрицы, поэтому индексирование по столбцам делает обработку быстрее.Вот пример того, что я имею в виду:
общие параметры
nbr_channels = 20;
nbr_samples_per_channel = 3200000;
fake_data = randn(1, nbr_samples_per_channel);
ROI = 1200000 : 2800000;
назначить данные по строке
data = nan(nbr_channels, nbr_samples_per_channel);
tic;
for j = 1 : nbr_channels
data(j, 1:nbr_samples_per_channel) = fake_data;
end;
toc;
% Elapsed time is 1.476525 seconds.
возврат данных из матрицы строк
tic;
for j = 1 : nbr_channels
bla = data(j, ROI);
end;
toc;
% Elapsed time is 0.572162 seconds.
возврат всех данных из матрицы строк
tic;
for j = 1 : nbr_channels
bla = data(j, :);
end;
toc;
% Elapsed time is 0.589489 seconds.
назначение данных постолбец
data = nan(nbr_samples_per_channel, nbr_channels);
tic;
for j = 1 : nbr_channels
data(1:nbr_samples_per_channel, j) = fake_data;
end;
toc;
% Elapsed time is 0.299682 seconds.
возврат данных из матрицы столбцов
tic;
for j = 1 : nbr_channels
bla = data(ROI, j);
end;
toc;
% Elapsed time is 0.260824 seconds.
возврат всех данных из матрицы столбцов
tic;
f or j = 1 : nbr_channels
bla = data(:, j);
end;
toc;
% Elapsed time is 0.092983 seconds.
Сводка Part1:
Как мы видим, доступ к данным по столбцам сокращает время обработки как минимум в два раза!
Но я не понимаю, почему клетки еще эффективнее!Посмотрите на этот пример:
назначить данные по ячейке
data = cell(1, nbr_samples_per_channel);
tic;
for j = 1 : nbr_channels
data{j} = fake_data;
end;
toc;
% Elapsed time is 0.000013 seconds.
вернуть данные из массива ячеек
tic;
for j = 1 : nbr_channels
bla = data{j}(ROI);
end;
toc;
% Elapsed time is 0.260294 seconds.
вернуть все данные из массива ячеек
tic;
for j = 1 : nbr_channels
bla = data{j};
end;
toc;
% Elapsed time is 0.000022 seconds.
%%
Сводка Part2:
Это на несколько порядков быстрее, чем яв части 1.
Вопрос 1
Почему время доступа к данным, хранящимся в ячейках, меньше, чем в матрицах?
Вопрос 2
Работа с матрицами обычно проще, чем с ячейками, потому что с включенной матрицей можно сделать
my_matrix(100:20000, 1:3)
, но с ячейками я не могу этого сделать(насколько я знаю).Любые альтернативы о том, как вернуть определенные элементы из нескольких ячеек одновременно?