分割三维矩阵划分为多个二维矩阵
问题描述:
我有一个3×1单元阵列看起来像这样:分割三维矩阵划分为多个二维矩阵
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(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秒,你的电池阵列。
答
这是怎么回事?
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
答
我尝试了一些不同的方法,但是我发现您自己的实现方式与其他解决方案相比是最快的。 如果你想要更多的速度,你可以考虑一个parfor循环。 (并行计算)