如何从多维矩阵中提取一维行

时间:2014-06-04 14:36:56

标签: arrays matlab matrix multidimensional-array

我目前有一个3维矩阵,我想从索引中提取单行(到第三维)(比如matrix(2,1,:))。我最初预料到这个结果将是一维矩阵,但我得到的是1乘1乘n矩阵。通常这不是问题,但我使用的一些功能不像3D矩阵。例如,请参阅下面复制的问题:

threeDeeMatrix=rand(3,3,3);
oneDeeAttempt=threeDeeMatrix(1,1,:);
norm(oneDeeAttempt)

返回错误消息:

Error using norm
Input must be 2-D.

这是因为oneDeeAttempt是

oneDeeAttempt(:,:,1) =

    0.8400


oneDeeAttempt(:,:,2) =

    0.0700


oneDeeAttempt(:,:,3) =

    0.7663

而不是[0.8400 0.0700 0.7663]

如何剥离这些额外的尺寸?我能想出的唯一解决方案是使用循环来手动复制值,但这似乎有点过分。

1 个答案:

答案 0 :(得分:2)

使用置换重新排列矩阵

解决方案(我在问这个问题的最后阶段发现)是使用置换,它重新排列维度的顺序(类似于2D矩阵的a=a')。一旦单位尺寸最后,它们就会从矩阵中剥离出来并变成一维。

oneDee=permute(oneDeeAttempt,[3 1 2]) %rearrange so the previous third dimension is now the first
%the matrix is now 3 by 1 by 1 which becomes 3

使用squeeze删除前导单例尺寸

正如Luis Mendo squeeze所指出的那样,只需删除这些领先的单例维度,而不必担心哪些维度是非单例

oneDee=squeeze(oneDeeAttempt);