【问题标题】:Split 3d matrix into multiple 2d matrices将 3d 矩阵拆分为多个 2d 矩阵
【发布时间】:2016-08-06 00:11:50
【问题描述】:

我有一个 3x1 元胞数组,如下所示:

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

    [256x901x160 double]
    [256x901x160 double]
    [256x901x160 double]

我想采用第 3 维并将其拆分为 160 个不同的 2d 矩阵,即 160 个 [256x901] 矩阵。我想这样做是因为我编写了不同的二维矩阵函数。

我想要的输出是一个包含 256x901 矩阵的 3x160 元胞数组。

我知道我需要使用 reshape 或 mat2cell,但我不太确定语法。

编辑

我找到了一种较慢的方法,但它不是很好..

for i = 1:length(x)
    for k = 1:160
      y{:,k}= x{i}(:,:,k);
    end
 end

有什么提高速度的建议吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这是一个较小数组的示例,它也适用于您的示例:

    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 秒。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        怎么样?

        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     
        

        【讨论】:

          猜你喜欢
          • 2020-05-13
          • 1970-01-01
          • 2011-01-16
          • 1970-01-01
          • 2021-08-17
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多