私がこれを行う方法は、目的のインデックスを調べてから、通常は何らかの形式の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マトリックスも同様に機能し、同じ方法でインデックスを作成します(ただし、使用する前にスクイーズすることを忘れないでください)。
私はこの質問で同様の答えを出しました。