MATLAB:`vertcat`反转(2D到3D)

MATLAB:`vertcat`反转(2D到3D),matlab,concatenation,Matlab,Concatenation,我正在寻找一种有效的方法,将一个巨大的2D矩阵分割成几个块,并将这些块转换成三维 取mat_orig(100x10)。每隔20行之后,我需要做一个切割,并将生成的块放入三维空间。也就是说,我的100x10矩阵必须生成20x10x5矩阵 我的解决方案包括mat2cell、permute和cell2mat。它正在工作,然而,我正在处理相当大的矩阵。我想知道是否有人觉得有挑战性,可以提供更复杂(更快)的解决方案 mat_orig = reshape(1:1000, 10, 100)'; mat_len

我正在寻找一种有效的方法,将一个巨大的2D矩阵分割成几个块,并将这些块转换成三维

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.)

您可以避免使用
cell2mat

N = 20; % number of rows per block
mat_split = permute(reshape(mat_orig, N, [], size(mat_orig,2)), [1 3 2]);

在本例中,您的
mat_splitted
10000*10*1000
——这与您所说的预期结果不符。请您更新您的示例,使其与描述相匹配,好吗?如果
mat_u orig
实际上是
100*10
,这将非常有用,因为在您的描述中,这比您给出的大型示例更易于可视化。。。我很感兴趣的是为什么
重塑(mat_orig,20,size(mat_orig,2),[])
不起作用?你可以忽略我上面的大部分评论,我现在意识到你给出了一个简短的例子(根据描述)和一个大的例子(使计时更有效)。