Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB多维矩阵存取_Matlab_Matrix - Fatal编程技术网

MATLAB多维矩阵存取

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子矩阵提取不会导致矩阵大小减小?不同的子

大家新年快乐

我新年的第一篇帖子,希望能得到一些运气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子矩阵提取不会导致矩阵大小减小?不同的子访问行为不同,也就是说,对最后一个维度更谨慎

谢谢大家!

Edit01:

为了方便起见,我将在这里显示我的singleton和Squence测试结果:

挤压的使用:


正如您所注意到的,当您使用
(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]之后。