MATLAB多维矩阵存取
大家新年快乐 我新年的第一篇帖子,希望能得到一些运气D 我有一个4D矩阵X,它的大小是1001003。我用X(51,:,51,:)提取它的子矩阵,并期望结果是一个100x3的2D矩阵。但不是,结果是一个4D矩阵,大小=1100,1,3。怎么会呢 更令人困惑的结果是:MATLAB多维矩阵存取,matlab,matrix,Matlab,Matrix,大家新年快乐 我新年的第一篇帖子,希望能得到一些运气D 我有一个4D矩阵X,它的大小是1001003。我用X(51,:,51,:)提取它的子矩阵,并期望结果是一个100x3的2D矩阵。但不是,结果是一个4D矩阵,大小=1100,1,3。怎么会呢 更令人困惑的结果是: 我可以使用plot(X(51,:,51,I))和plot(X(:,51,51,I))来表示I=1,2,3 不能将plot(X(51,51,:,i))与相同的i一起使用 简言之,MATLAB子矩阵提取不会导致矩阵大小减小?不同的子
- 我可以使用plot(X(51,:,51,I))和plot(X(:,51,51,I))来表示I=1,2,3
- 不能将plot(X(51,51,:,i))与相同的i一起使用
正如您所注意到的,当您使用
(51,:,51,:)
索引到100x100x3
矩阵时,您会得到大小[1100 1 3]
的结果。size=1
的维度称为单体维度
MATLAB不会自动删除非尾随单体维度(对于大于2D的矩阵)-用于消除这些维度。如果最后一个维度是singleton,则会自动处理该维度
所以在你的情况下,你有
X = zeros(100,100,100,3);
Y = X(51,:,51,:); #% size(Y) = [1 100 1 3];
Y2 = squeeze(X(51,:,51,:)); #% size(Y2) = [100 3] - singletons removed
P1 = X(51,:,51,1); #% size(P1) = [1 100 1 1] which becomes [1 100] (2D)
P2 = X(51,51,:,1); #% size(P2) = [1 1 100 1] which becomes [1 1 100] (3D)
谢谢你的新年好运!我现在可以记录这个MATLAB评论了,顺便说一下,我想添加一个小的修正:P2=X(51,51,:,1);%大小(P2)=[1100]并且在被皇后化[101 1]之后。