2013-12-10 9 views
6

A(:,:,1)=[1,2,3;2,3,4]A(:,:,2)=[3,4,5;4,5,6]というような行列があるとします。行列の第3次元を削除する

ベクター(1,2,3)、(2,3,4)、(3,4,5)、(4,5,6)にアクセスしてプロットする最も簡単な方法はどれですか。私はB=[A(:,:,1);A(:,:,2)]を作成しようとしましたが、私は任意の数のAに手続きが必要です。

これは些細なことではないと私は満足しています。ここでは、重要ではありません順序を想定し

答えて

4

あなたは長さ3のベクトルのためにそれを行うことができる方法である:任意の次元のベクトルに対する

B = reshape(shiftdim(A,2), [], 3) 
plot(B') 

size(A,2)

5

によって3を交換するあなたが縦に「考える必要があります'これは、あなたがコロンのインデックスを使用できるようになります:

>> A(:,:,1) = [1,2,3;2,3,4].'; %'// NOTE: transpose of your original 
>> A(:,:,2) = [3,4,5;4,5,6].'; %'// NOTE: transpose of your original 
>> A(:,:) 
ans = 
    1  2  3  4 
    2  3  4  5 
    3  4  5  6 

任意の次元Aための2つのコロン作品と大腸インデックス:あなたはそれをマスターしたら、MATLABで

>> A(:,:,:,:,1,1) = [1 2 3; 2 3 4].'; %' 
>> A(:,:,:,:,2,1) = [3 4 5; 4 5 6].'; %' 
>> A(:,:,:,:,1,2) = [5 6 7; 6 7 8].'; %' 
>> A(:,:,:,:,2,2) = [7 8 9; 8 9 0].'; %' 
>> A(:,:) 
ans = 
    1  2  3  4  5  6  7  8 
    2  3  4  5  6  7  8  9 
    3  4  5  6  7  8  9  0 

コロンのインデックス作成は非常に興味深く、本当に強力です。たとえば、配列内の次元数より少ないコロン数を使用する場合(前述のように)、MATLABはコロン数に等しい次元に沿って残りのデータを自動的に連結します。

したがって、Aの寸法が48の場合、2コロンでインデックスを作成すると、残りの46個の寸法が2 ndの次元に沿って連結された2D配列が得られます。 AがちょうどM ≤ NコロンでインデックスをN寸法を持っていますが、あなたの場合:一般的に

あなたはM -D配列を得るでしょう、それはM番目次元に沿って、残りのN-M寸法を連結したものです。だから、限り、あなたはではなく上のベクトルを含むようにあなたのAを自由に定義されているよう

(あなたがこれを行うために皆に助言する必要があり、MATLABのように、事実上すべてのものが少し速くその方法です) 、私はこれがあなたが望むことを行う最も速く、最もエレガントな方法だと思います。

ていない場合は、よく、そしてちょうどreshapeダンのような:)の洞察力の使用のために

+1

1:オペレーター! – bla