我有一个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新手的任何提示吗?
答案 0 :(得分:1)
您的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
答案 1 :(得分:1)
一个简单的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
- 循环......