删除矩阵的第三维

时间:2013-12-10 15:11:43

标签: matlab

假设我的矩阵是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的过程。

希望这不是微不足道的,我已经让自己满意了。

2 个答案:

答案 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)

替换3