12

MATLAB に 3D 配列がありsize(myArray) = [100 100 50]ます。ここで、最初の次元のインデックスで指定された特定のレイヤーを 2D マトリックスの形式で取得したいと考えています。を試してみmyMatrix = myArray(myIndex,:,:);ましたが、 の 3D 配列が得られsize(myMatrix) = [1 100 50]ます。

最初の次元には関心がない (レイヤーが 1 つしかないため) ことを MATLAB に伝えるにはどうすればよいですか?

注: 2 番目のインデックスでもこれを行う必要がありsize(myMatrix) = [100 1 50]、目的の[100 50]. 解決策は両方のケースに適用でき、できれば 3 次元にも適用できる必要があります。

4

3 に答える 3

14

squeeze大きさが 1 の次元を削除する関数を使用します。

例:

A=randn(4,50,100);
B=squeeze(A(1,:,:));
size(B)

ans =

    50   100

これは一般化されたものであり、どのディメンションに沿ってインデックスを作成しているかについて心配する必要はありません。すべてのシングルトン次元が絞り出されます。

于 2011-04-19T17:13:57.753 に答える
2
reshape(myArray(myIndex,:,:),[100,50])
于 2011-04-19T17:11:30.830 に答える
0

squeezereshapeおよびpermuteは、おそらく ND 行列を処理する際に最も重要な 3 つの関数です。3 番目の関数の使用方法の例を示します。

A=randn(4,50,100);
B=permute(A(1,:,:),[2,3,1])
于 2016-02-05T14:08:17.247 に答える