我这样做的方法是查看所需的索引,然后找出生成它们的方法,通常使用某种形式的 repmat。例如,如果您想要每列中的最后 4 个项目,A 的(绝对)索引将是 3、4、5、6,然后将行数添加到移动到下一列得到 9 ,10,11,12 等等。因此,问题就变成了根据您的行数、列数以及每列所需的元素数来生成该矩阵(我将其称为 n,在您的情况下为 n = 4)。
octave:1> A = [1:6; 3:8; 5:10]'
A =
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
6 8 10
octave:2> dim=size(A)
dim =
6 3
octave:3> n=4
n = 4
octave:4> x=repmat((dim(1)-n+1):dim(1),[dim(2),1])'
x =
3 3 3
4 4 4
5 5 5
6 6 6
octave:5> y=repmat((0:(dim(2)-1)),[n,1])
y =
0 1 2
0 1 2
0 1 2
0 1 2
octave:6> ii=x+dim(1)*y
ii =
3 9 15
4 10 16
5 11 17
6 12 18
octave:7> A(ii)
ans =
3 5 7
4 6 8
5 7 9
6 8 10
octave:8> B=reshape(A(ii),sqrt(n),sqrt(n),dim(2))
B =
ans(:,:,1) =
3 5
4 6
ans(:,:,2) =
5 7
6 8
ans(:,:,3) =
7 9
8 10
根据您生成 x 和 y 的方式,您甚至可以取消乘法,但我将把它留给您。:D
IMO 您也不需要单元格数组来存储它们,3D 矩阵也可以工作,并且您以相同的方式对其进行索引(但不要忘记在使用之前挤压它)。
我在这个问题上给出了类似的答案。