如何从 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
的范围从 1
到 min(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,[])});
我的问题可能很简单。我在 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
的范围从 1
到 min(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,[])});