2016-04-11 28 views
0

私は[? 5]配列:(?=この場合は3)(?5)ナンシーアレイ[? 5 5]〜[? 5]

[[[ 0 1 2 3 4] 
[ 5 6 7 8 9] 
[10 11 12 13 14] 
[15 16 17 18 19] 
[20 21 22 23 24]] 
[[25 26 27 28 29] 
[30 31 32 33 34] 
[35 36 37 38 39] 
[40 41 42 43 44] 
[45 46 47 48 49]] 
[[50 51 52 53 54] 
[55 56 57 58 59] 
[60 61 62 63 64] 
[65 66 67 68 69] 
[70 71 72 73 74]]] 

Iは、(行の位)5が欲しい別のアレイは次のように持っている:

[array([[ 0, 1, 2, 3, 4], 
    [25, 26, 27, 28, 29], 
    [50, 51, 52, 53, 54]]), 
array([[ 5, 6, 7, 8, 9], 
    [30, 31, 32, 33, 34], 
    [55, 56, 57, 58, 59]]), 
array([[10, 11, 12, 13, 14], 
    [35, 36, 37, 38, 39], 
    [60, 61, 62, 63, 64]]), 
array([[15, 16, 17, 18, 19], 
    [40, 41, 42, 43, 44], 
    [65, 66, 67, 68, 69]]), 
array([[20, 21, 22, 23, 24], 
    [45, 46, 47, 48, 49], 
    [70, 71, 72, 73, 74]])] 

はこれですこれを行うには、単純に1/2 numpyの操作方法が好きですか?

+0

質問を「ナンシーアレイ[3 5 5]〜[5 3 5]」または「...〜5x [3 5]」に改名して他の人にもっと便利にすることを提案したいと思います。明らかに、「転置」という言葉は、初めて多次元データを見ているすべての人にとっては明白ではないので、ここでこの質問を維持する価値があります。さもなければ、これは他の既存の 'transpose'質問と重複していると確信しています。 – roadrunner66

+0

@ roadrunner66それは何でもかまいませんから?あなたは5にそれを変更すると、他の人にとってより良いと思いますか?ありがとう! –

+0

ええ、私は分かりません、私はちょうど離れて同様の問題(転位の単語を知らない人)があなたの質問を見つけることを離れて見つけたかった。たぶん 'numpy配列の次元を並べ替える '? – roadrunner66

答えて

2

はい、あります。numpy.transposeです。あなたは、あなたの3D構造の軸の中の任意のシーケンスを選択することになります。

import numpy as np 

aaa=np.array([[[ 0 , 1, 2, 3, 4], 
[ 5, 6, 7, 8, 9], 
[10, 11, 12, 13, 14], 
[15, 16, 17, 18, 19], 
[20, 21, 22, 23, 24]], 
[[25, 26, 27, 28, 29], 
[30, 31, 32, 33, 34], 
[35, 36, 37, 38, 39], 
[40, 41, 42, 43, 44], 
[45, 46, 47, 48, 49]], 
[[50, 51, 52, 53, 54], 
[55, 56, 57, 58, 59], 
[60, 61, 62, 63, 64], 
[65, 66, 67, 68, 69], 
[70, 71, 72, 73, 74]]]) 

bb= np.transpose(aaa,axes=[1,0,2]) 
print bb 

は出力:

[[[ 0 1 2 3 4] 
    [25 26 27 28 29] 
    [50 51 52 53 54]] 

[[ 5 6 7 8 9] 
    [30 31 32 33 34] 
    [55 56 57 58 59]] 

[[10 11 12 13 14] 
    [35 36 37 38 39] 
    [60 61 62 63 64]] 

[[15 16 17 18 19] 
    [40 41 42 43 44] 
    [65 66 67 68 69]] 

[[20 21 22 23 24] 
    [45 46 47 48 49] 
    [70 71 72 73 74]]]. 

ちょうどそうのようなインデックスを使用して、サブアレイにアクセスするには:

c= b[0] 
print c 

出力:ちょうど別の解決策を提案する

[[ 0 1 2 3 4] 
[25 26 27 28 29] 
[50 51 52 53 54]] 
+0

ありがとう!次に、分割を適用して5つの配列を取得する必要がありますか? 1回の操作でそれを行うことはできますか? –

+0

分割は必要ありません。 5つのサブ配列にアクセスするには、単にindexing: 'print b [0]' 'print b [1]'などを使うか、好きなものに再割り当てしてください: 'c1 = b [0]'など – roadrunner66

+1

@SungKimまた、 'a、b、c、d、e = np.transpose(aaa、axes =(1、0、2))'と書くだけです。 –

2

np.swapaxesは別のものです軸のペアのみが含まれている場合はnp.transposeになります。

a, b, c, d, e = arr.swapaxes(0, 1) # swap axes 0, 1 

swapaxesは常に@ roadrunner66が提案しnp.transposeと同じ結果で、配列のビューを返します。通常はtransposeよりもはるかに速く、numpyのコードの中でよく使われ、が重要なの寸法を前に付けます。