Мне кажется, что MATLAB сжимает одноэлементные измерения в правой части последнего неодноэлементного измерения с тем ограничением, что матрица должна быть как минимум двумерной.
Вывод правила из примеров заставляет меня чувствовать себя некомфортно, но, похоже, это работает.
in 2D:
E = zeros(2,3);
E(1,:); % 1x3
E(:,1); % 2x1
in 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
in 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
in 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)
! Каждый массив на самом деле имеет в конце бесконечное количество одноэлементных измерений! - person Cris Luengo   schedule 23.06.2019