Matlab では、次のように配列の次元全体を折りたたむことができます。
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
シリアル化またはフラット化と呼ばれると思います。要素の順序は、dim1、dim2、dim3 の順です[M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]
。
しかし、私がやりたいのは、最初の 2 つの次元に沿って折りたたむことです。
mymatrix = M( :: , : ); % something that works like this?
12 x 5 のマトリックスを指定します。たとえば、次のようになります。
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
の最初の次元mymatrix
は、元の の 1 番目と 2 番目の次元を「平坦化」しM
ますが、他の次元は保持します。
私は実際に5次元配列の「中間3次元」に対してこれを行う必要があるので、一般的な解決策は素晴らしいでしょう! たとえば、私が何を意味するかがわかればW=rand(N,N,N,N,N); mymatrix = W( :, :::, : )
、行列を与える必要があります。N x N^3 x N
ありがとう