将3d矩阵拆分为多个2d矩阵

时间:2016-08-04 23:00:37

标签: matlab

我有一个3x1的单元格数组,如下所示:

 for {
    (k,v) <- testmap.groupBy{ _._1.split("\\.")(0) }  //first tokenize by "." and group by prefix
  } yield (k -> v.map{case(subKey,subValue) => subKey.replace(k,"").replace("\\.","") -> subValue })  //stripping prefix from submaps

我想取第三维并将其分成160个不同的2d矩阵,所以160 [256x901]矩阵。我想这样做是因为我编写了不同的函数,它们采用了2d矩阵。

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

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

修改

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

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

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

任何提高速度的建议?

3 个答案:

答案 0 :(得分: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秒。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这是怎么回事?

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