Я ищу эффективный способ разбить огромную 2D матрицу на несколько блоков и перенести эти блоки в 3-е измерение.
Взять mat_orig
(100x10
).После каждых 20 рядов мне нужно сделать разрез и поместить полученный блок в 3-е измерение.То есть моя 100x10
матрица должна приводить к 20x10x5
матрице.
Мое решение включает mat2cell, permute и cell2mat.Это работает, однако, я работаю над довольно большими матрицами.Мне интересно, если кто-то испытывает трудности и может предложить более изощренное (более быстрое) решение?
mat_orig = reshape(1:1000, 10, 100)';
mat_len = 20;
num_pages = size(mat_orig, 1) / mat_len;
tic;
mat_splitted = cell2mat(permute(mat2cell(mat_orig, ones(1, num_pages) *
size(mat_orig, 1) / num_pages, 10), [3, 2,1]));
toc (% Elapsed time is 0.108561 seconds.)
mat_orig = reshape(1:100000000, 10, 10000000)';
mat_len = 10000;
num_pages = size(mat_orig, 1) / mat_len;
tic;
mat_splitted = cell2mat(permute(mat2cell(mat_orig, ones(1, num_pages) *
size(mat_orig, 1) / num_pages, 10), [3, 2,1]));
toc (% Elapsed time is 4.361126 seconds.)