【发布时间】:2019-11-05 11:02:59
【问题描述】:
在我看来,MATLAB 会在最后一个非单一维度的右侧挤压单一维度,但矩阵必须至少是二维的。
从示例中推断规则让我感到不舒服,但它似乎有效。
二维:
E = zeros(2,3);
E(1,:); % 1x3
E(:,1); % 2x1
在 3D 中:
E = zeros(2,3,4);
E(1,:,:); % 1x3x4
E(:,1,:); % 2x1x4
E(:,:,1); % 2x3
E(1,1,:); % 1x1x4
E(:,1,1); % 2x1
E(1,:,1); % 1x3
在 4D 中:
E = zeros(2,3,4,5);
E(:,:,:,1) % 2x3x4
E(:,:,1,1) % 2x3
E(:,1,1,1) % 2x1
E(1,:,:,:) % 1x3x4x5
E(1,1,:,:) % 1x1x4x5
E(1,1,1,:) % 1x1x1x5
E(:,:,1,:) % 2x3x1x5
E(:,1,:,:) % 2x1x4x5
E(1,:,:,1) % 1x3x4
E(1,:,1,:) % 1x3x1x5
E(:,1,:,1) % 2x1x4
E(1,1,:,1) % 1x1x4
E(1,:,1,1) % 1x3
谁能确认这是否是规则?
附带问题:这条规则是否也适用于diff()等函数?好像是这样的。
我看到的唯一区别是你可以获得一个空矩阵,然后空维度左侧的单维维度不会被删除,即使它是最大维度:
E = zeros(2,3,4);
diff(E,1,1) % 1x3x4
diff(E,3,2) % 0x3x4
diff(E,2,2) % 2x1x4
diff(E,3,2) % 2x0x4
diff(E,3,3) % 2x3
diff(E,4,3) % 2x3x0
在 4D 中
E = zeros(2,3,1,5);
diff(E,3,4) % 2x3x1x2
diff(E,4,4) % 2x3
diff(E,5,4) % 2x3x1x0
再一次,这只是一个临时解释,我不会测试所有可能的情况。规则是什么?
【问题讨论】:
-
然后试试这个:
E = zeros(2,3); size(E,3)!每个数组最后实际上都有无限数量的单维! -
有趣的评论。这让我想到了浮点数小数部分的尾随零,不同之处在于保留了前导单例维度,而整数部分中的前导零并不重要。