如何从 matlab 中的 3D 数组中提取对角线切片

How to extract diagonal slices from a 3D array in matlab

我的问题可能很简单。我在 MatLab 中有一个大型 3D 矩阵(m x n x k 元素),我想提取所有对角线切片并将它们存储在另一个 3D 数组中。为了更好地展示,我附上了一张图片。虚线是我正在寻找的对角线切片。

给定一个 m x n x k 数组 a 使用以下方法将切片提取到元胞数组中:

idx = repmat(reshape((0 : k - 1), 1, 1,[])+(1 : n), [m, 1, 1]);
result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});

切片的尺寸为 [m x 1 x y],其中 y 的范围从 1min(n,k)

对于旧的 MATLAB 版本,使用以下(bsxfun 而不是隐式扩展):

idx = repmat(bsxfun(@plus, reshape((0 : k - 1), 1, 1,[]), (1 : n)), [m, 1, 1]);
result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});