A = rand(3, 4, 5);
3次元配列があり、ベクトルを抽出したいとしましょうA(1,1,:)
。このように書くと、出力は size[1 1 5]
の単純なベクトルではなく、 size の 3D 配列になります[1 5]
。これにより、たとえば、別のサブ配列に割り当てることができなくなりますB(1,:)
(「添字付きの割り当て次元の不一致」が発生します)。元の寸法を維持せずにベクトルを抽出する最良の方法は何ですか?
私は2つのアプローチを考えることができます:
下付き文字を使用する代わりに、目的の要素の線形インデックスを計算します。
targetInds = 1:5; fixedInds = repmat(1,size(targetInds)); inds = sub2ind(size(A), fixedInds, fixedInds, targetInds); size(A(inds)) ans = 1 5
使用
reshape
:subA = reshape(A(1,1,:),1,size(A,3)); size(subA) ans = 1 5
2 番目の方法は簡単に思えますが、効率が悪いと思います。どちらも追加のコードが必要です。もっと簡単な方法はありますか?