Matlab:将三维数组重塑为二维数组
Matlab: reshape 3-dimensional array into 2-dimensional array
我有一个 3x3x2000 的旋转矩阵数组,我需要将其转换为 2000x9 的数组。
我想我必须结合使用 permute() 和 reshape(),但我没有得到正确的输出顺序。
这是我需要的:
First row of 3x3 array needs to be columns 1:3 in the output
Second row of 3x3 array needs to be columns 4:6 in the output
Third row of 3x3 array needs to be columns 7:9 in the output
我已经尝试了以下代码中数字 1 2 3 的所有可能组合:
out1 = permute(input, [2 3 1]);
out2 = reshape(out1, [2000 9]);
但我总是以错误的顺序结束。对 Matlab 新手有什么建议吗?
您的 permute
搞错了
a = reshape(1:9*6, 3, 3, []);
a
是一个3x3x6的矩阵,每个
a(:,:,i) = 9*(i-1) + [1 4 7
2 5 8
3 6 9];
所以
out1 = permute(a, [3,1,2]);
out2 = reshape(out1, [], 9);
或在一行中
out3 = reshape(permute(a, [3,1,2]), [], 9);
所以
out2 = out3 =
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54
一个简单的 for
循环怎么样?
for i=1:size(myinput,3)
myoutput(i,:)=[myinput(1,:,i) myinput(2,:,i) myinput(3,:,i)];
% or
% myoutput(i,:)=reshape(myinput(:,:,i),[],9);
end
不像使用permute
和reshape
那样简单,但它透明且易于调试。一旦你的程序中的一切都完美运行,你可以考虑在你的代码中重写这样的 for
-loops...
我有一个 3x3x2000 的旋转矩阵数组,我需要将其转换为 2000x9 的数组。
我想我必须结合使用 permute() 和 reshape(),但我没有得到正确的输出顺序。
这是我需要的:
First row of 3x3 array needs to be columns 1:3 in the output
Second row of 3x3 array needs to be columns 4:6 in the output
Third row of 3x3 array needs to be columns 7:9 in the output
我已经尝试了以下代码中数字 1 2 3 的所有可能组合:
out1 = permute(input, [2 3 1]);
out2 = reshape(out1, [2000 9]);
但我总是以错误的顺序结束。对 Matlab 新手有什么建议吗?
您的 permute
a = reshape(1:9*6, 3, 3, []);
a
是一个3x3x6的矩阵,每个
a(:,:,i) = 9*(i-1) + [1 4 7
2 5 8
3 6 9];
所以
out1 = permute(a, [3,1,2]);
out2 = reshape(out1, [], 9);
或在一行中
out3 = reshape(permute(a, [3,1,2]), [], 9);
所以
out2 = out3 =
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54
一个简单的 for
循环怎么样?
for i=1:size(myinput,3)
myoutput(i,:)=[myinput(1,:,i) myinput(2,:,i) myinput(3,:,i)];
% or
% myoutput(i,:)=reshape(myinput(:,:,i),[],9);
end
不像使用permute
和reshape
那样简单,但它透明且易于调试。一旦你的程序中的一切都完美运行,你可以考虑在你的代码中重写这样的 for
-loops...