Matlab 将三维矩阵拆分为多个二维矩阵

Matlab 将三维矩阵拆分为多个二维矩阵,matlab,Matlab,我有一个3x1单元阵列,如下所示: x={rand(256,901,160);rand(256,901,160);rand(256,901,160)}; [256x901x160 double] [256x901x160 double] [256x901x160 double] 我想把第三维分解成160个不同的二维矩阵,也就是160个[256x901]矩阵。我之所以想这样做,是因为我编写了不同的函数,它们接受2d矩阵 我想要的输出是一个3x160单元阵列,包含256x

我有一个3x1单元阵列,如下所示:

x={rand(256,901,160);rand(256,901,160);rand(256,901,160)};

    [256x901x160 double]
    [256x901x160 double]
    [256x901x160 double]
我想把第三维分解成160个不同的二维矩阵,也就是160个[256x901]矩阵。我之所以想这样做,是因为我编写了不同的函数,它们接受2d矩阵

我想要的输出是一个3x160单元阵列,包含256x901矩阵

我知道我需要使用重塑或mat2cell,但我对语法不是很确定

编辑

我找到了一种慢一点的方法,但效果不太好

for i = 1:length(x)
    for k = 1:160
      y{:,k}= x{i}(:,:,k);
    end
 end
有什么提高速度的建议吗?

怎么样

x ={rand(256,901,160), rand(256,901,160), rand(256,901,160)}';

x_1 = x{1};
x_2 = x{2};
x_3 = x{3};

two_d_arrays = cell(3, 160);

for k = 1:size(two_d_arrays, 2)   
    two_d_arrays{1, k} =  x_1(:, :, k);
    two_d_arrays{2, k} =  x_2(:, :, k);
    two_d_arrays{3, k} =  x_3(:, :, k);
end     

下面是一个较小阵列的示例,它也适用于您的示例:

x = {rand(3,4,5);rand(3,4,5);rand(3,4,5)};
y = cell(length(x),size(x{1},3));
for k = 1:length(x)
    t = reshape(x{k},[size(x{1},1) size(x{1},2)*size(x{1},3)]);
    y(k,:) = mat2cell(t,size(x{1},1),ones(size(x{1},3),1)*size(x{1},2));
end

在我的计算机上,使用您的单元阵列需要0.36035秒。

我尝试了一些不同的方法,但我发现您自己的实现是最快的,即使与其他给出的解决方案相比也是如此。 如果你想要更多的速度,你可以考虑一个PARF循环。(并行计算)