我正在寻找一种有效的方法,将一个巨大的2D矩阵分成几个块,并将这些块转移到3维空间。
以mat_orig (100x10)为例。在每隔20行之后,我需要进行一次切割,并将生成的块放入第三维。也就是说,我的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.)发布于 2019-07-04 21:29:10
您可以避免使用cell2mat
N = 20; % number of rows per block
mat_split = permute(reshape(mat_orig, N, [], size(mat_orig,2)), [1 3 2]);https://stackoverflow.com/questions/56888241
复制相似问题