我目前有一个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]
如何剥离这些额外的尺寸?我能想出的唯一解决方案是使用循环来手动复制值,但这似乎有点过分。
答案 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
正如Luis Mendo squeeze
所指出的那样,只需删除这些领先的单例维度,而不必担心哪些维度是非单例
oneDee=squeeze(oneDeeAttempt);