我有一个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]
任何提高速度的建议?
答案 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