假设我的矩阵是A(:,:,1)=[1,2,3;2,3,4]
,A(:,:,2)=[3,4,5;4,5,6]
。
如何最简单地访问和绘制向量(1,2,3),(2,3,4),(3,4,5),(4,5,6)。我尝试创建B=[A(:,:,1);A(:,:,2)]
,但我需要一个任意数量的A的过程。
希望这不是微不足道的,我已经让自己满意了。
答案 0 :(得分:5)
你应该'垂直'思考。这将允许您使用冒号索引:
>> 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
使用两个冒号的冒号索引适用于任何维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
MATLAB中的冒号索引非常有趣,一旦掌握它就非常强大。例如,如果使用的冒号少于数组中的维度(如上所述),MATLAB将自动连接沿着维度等于冒号计数的其余数据。
因此,如果A
有48个维度,但你只用2个冒号索引:你将得到一个二维数组,即沿着2 nd 维度。
一般情况下:如果A
具有N
维度,但您只使用M ≤ N
冒号进行索引:您将获得M
- D数组,即连接N-M
th 维度中剩余的M
维度。
因此,只要您可以自由定义A
以包含列上的向量而不是行(您应该建议每个人都这样做,因为几乎所有MATLAB中的所有内容都快一点),我认为这是做你想做的最快,最优雅的方式。
如果不是,那么只有reshape
像Dan :)
答案 1 :(得分:4)
假设顺序无关紧要,以下是如何为长度为3的向量执行此操作:
B = reshape(shiftdim(A,2), [], 3)
plot(B')
对于任意尺寸的矢量,请用size(A,2)