你应该'垂直'思考.这将允许您使用冒号索引:
>> A(:,:,1) = [1,2,3;2,3,4].'; %'// NOTE: transpose of your original
>> A(:,:,2) = [3,4,5;4,5,6].'; %'// NOTE: transpose of your original
>> A(:,:)
ans =
1 2 3 4
2 3 4 5
3 4 5 6
Run Code Online (Sandbox Code Playgroud)
使用两个冒号的冒号索引适用于任何维度A:
>> A(:,:,:,:,1,1) = [1 2 3; 2 3 4].'; %'
>> A(:,:,:,:,2,1) = [3 4 5; 4 5 6].'; %'
>> A(:,:,:,:,1,2) = [5 6 7; 6 7 8].'; %'
>> A(:,:,:,:,2,2) = [7 8 9; 8 9 0].'; %'
>> A(:,:)
ans =
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 0
Run Code Online (Sandbox Code Playgroud)
MATLAB中的冒号索引非常有趣,一旦掌握它就非常强大.例如,如果使用的冒号少于数组中的维度(如上所述),MATLAB将自动连接沿着维度等于冒号计数的其余数据.
因此,如果A有48个维度,但您只用2个冒号索引:您将获得一个二维数组,即第二维中剩余的46个维度的串联.
一般来说:如果A有N尺寸,但你用M ? N冒号进行索引:你将得到一个M-D数组,即N-M沿着M第二维的剩余尺寸的连接.
因此,只要你可以自由地定义你A在列而不是行上包含向量(你应该建议每个人都这样做,因为MATLAB中的几乎所有东西都快一点),我认为这是最快和最多的优雅的方式做你想要的.
如果没有,那么reshape就像Dan :)
假设顺序无关紧要,下面是对长度为 3 的向量执行此操作的方法:
B = reshape(shiftdim(A,2), [], 3)
plot(B')
Run Code Online (Sandbox Code Playgroud)
对于任意维度的向量,将 3 替换为size(A,2)