在 Matlab 中切片多维数组

slicing multidimensional array in Matlab

我想知道为什么在 Matlab 中:

x = randn(100,100,3,30);
r = x(:,:,1,:);
q = y(:,:,:,1);

q 是一个 100x100x3 双精度数组,而 r 是一个 4-D 双精度数组。 有什么提示吗?

其实r也是一个3D数组,但是4D数组中的第3维只包含1个元素,所以它是一个单维,可以使用squeeze删除。 Matlab 不会自动删除它,因为它不是 "last" 维度,与 q.

相反

换句话说,

size(r) = 100 100 1 30

size(q) = 100 100 3 1

自动变为 100 100 3

在这两种情况下调用 size(squeeze(r))size(squeeze(q)) 都会生成一个 3D 数组。

是不是更清楚了一些?