2016-12-18 11 views
1

まず簡単な例print(np.bmat(e.tolist()))又はprint(np.bmat([[a,b],[c,d]]))の結果と全く同じであるを効率的

[[ 1. 1. 2. 2.] 
[ 1. 1. 2. 2.] 
[ 3. 3. 4. 4.] 
[ 3. 3. 4. 4.]] 

を生成

import numpy as np 

a = np.ones((2,2)) 
b = 2*np.ones((2,2)) 
c = 3*np.ones((2,2)) 
d = 4*np.ones((2,2)) 
e = np.array([[a,b],[c,d]]) 
print(np.vstack(np.array([np.hstack(e[i,:]) for i in range(2)]))) 

(2D numpyのアレイのnumpyのアレイからブロックnumpyのアレイを作成しますnp.bmatがキャスト可能なnumpy行列を作成するという事実を法とし、np.asarray()を使用します)。

しかし、私の問題は、私が大量のnumpy配列を作成しているところです(現時点では、400のように、後で400と同じようになります).2次元numpy配列と1つの大きなブロックnumpy配列を作成したいそれらから。私はこれを効率的にやりたいと考えています。可能であれば、リストとnumpy配列の間の変換を避けてください。これはより大きなループ構築の一部なので、何度も実行されます(配列は毎回異なります)。それは可能ですか?その後、

+0

ok、多分私は明らかではない。確かに、単純な例の場合、これは機能します。しかし、私の実際の問題では、2D numpy配列の大量の配列を作成し、それをリストに変換したくない場合 – ThunderBiggi

+0

36個の配列がある場合は、o/p配列を初期化してから繰り返しo/p配列にスライスして割り当てを行いますか? – Divakar

+0

私はあなたが何を意味するのかよく分かりません。配列の数は、近い将来に増加する予定のパラメータの関数なので、完全に自動であるべきです。 – ThunderBiggi

答えて

3
np.swapaxes(e, 1, 2).reshape([4, 4]) 

あなたは要素が我々の所望の出力を生成するためにeから引き出されるべき順序を調べると、あなたは我々が軸3に沿って移動したいことがわかります、それから1、2、その後、0 reshapeを描きます軸3、次に2、次に1、次に0になるので、reshapeを呼び出す前に軸1と軸2を交換します。

+0

これは私が必要としていたものです。私はちょうど私の質問を編集し、私は形を変えて試しましたが、うまくいかないと言いました。 – ThunderBiggi