は、我々はこのような配列の次元を越え折りたたむことができます:特定のディメンションセット全体で配列を折りたたむ方法は? 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次元に沿って崩壊である:12×5行列を与えるために
mymatrix = M(:: , :); % something that works like this?
。 mymatrix
の最初の次元は、元M
の第一及び第二の寸法を「フラット化」が、他の寸法を維持するように、したがって、たとえば、あなたが
[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)
...
]
を取得します。
私は実際には5次元配列の「中間3次元」のためにこれを行う必要があるので、一般的な解決策は素晴らしいでしょう!例えばW=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
はN x N^3 x N
の行列を与えるはずです。寸法の長さ引数の一つのプレースホルダとして角括弧([]
)と
おかげ
ありがとうございます!形の変更を考えていたはずです。 PS私はちょうど動作するように見える別の方法を考えました: 'tmp = permute(M、[1,5,2,3,4]);'、 'mymatrix = tmp(:、:)'それがいつも動くかどうか分からない?もちろん、「改造」は**多くの方が好まれます**。 –