删除矩阵的第三维

Hen*_*rik 6 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程序.

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

Rod*_*uis 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
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 :)


Den*_*din 4

假设顺序无关紧要,下面是对长度为 3 的向量执行此操作的方法:

B = reshape(shiftdim(A,2), [], 3)
plot(B')
Run Code Online (Sandbox Code Playgroud)

对于任意维度的向量,将 3 替换为size(A,2)