2017-08-27 16 views
1

申し訳ありません、ここでは与えられたデータです。 (i、4,2)、(i、4,3)、(i、4,2) の3つのnumpy配列があります。 dtypeはすべてfloat32です。 目的は、特定の順序でそれらを織り交ぜることです。のは、これらの配列のインデックス0のデータを見てみましょう。この場合Numpy Interweave奇妙な形状の配列

[[-208. -16.] 
[-192. -16.] 
[-192. 0.] 
[-208. 0.]] 

[[ 1. 1. 1.] 
[ 1. 1. 1.] 
[ 1. 1. 1.] 
[ 1. 1. 1.]] 

[[ 0.49609375 0.984375 ] 
[ 0.25390625 0.984375 ] 
[ 0.25390625 0.015625 ] 
[ 0.49609375 0.015625 ]] 

、concatenedターゲット配列は次のようになります。

[-208, -16, 1, 1, 1, 0.496, 0.984, -192, -16, 1, 1, 1, ...] 

をそしてインデックス1

を続けます

これを達成する方法はわかりません。連結機能は形状が一致しないことを伝え続けます。ターゲット配列の形状はそれほど重要ではありません.gpuシェーダへのアップロードのためには、メモリビューが指定された順序でなければなりません。

編集:これはいくつかのPythonループで実現できますが、このプログラムではパフォーマンスの影響が問題になります。

答えて

2

使用np.dstacknp.ravel()で平ら -

np.dstack((a,b,c)).ravel() 

次に、np.dstackは、基本的に第3の軸に沿って積層されています。だから、代わりに私たちは、あまりにもその軸に沿ってnp.concatenateを使用することができますので、のような -

np.concatenate((a,b,c),axis=2).ravel() 

サンプルの実行 -

1)セットアップ入力配列:

In [613]: np.random.seed(1234) 
    ...: n = 3 
    ...: m = 2 
    ...: a = np.random.randint(0,9,(n,m,2)) 
    ...: b = np.random.randint(11,99,(n,m,2)) 
    ...: c = np.random.randint(101,999,(n,m,2)) 
    ...: 

2)を確認し、入力値:

In [614]: a 
Out[614]: 
array([[[3, 6], 
     [5, 4]], 

     [[8, 1], 
     [7, 6]], 

     [[8, 0], 
     [5, 0]]]) 

In [615]: b 
Out[615]: 
array([[[84, 58], 
     [61, 87]], 

     [[48, 45], 
     [49, 78]], 

     [[22, 11], 
     [86, 91]]]) 

In [616]: c 
Out[616]: 
array([[[104, 359], 
     [376, 560]], 

     [[472, 720], 
     [566, 115]], 

     [[344, 556], 
     [929, 591]]]) 

3)出力:

私はどうなるのか
In [617]: np.dstack((a,b,c)).ravel() 
Out[617]: 
array([ 3, 6, 84, 58, 104, 359, 5, 4, 61, 87, 376, 560, 8, 
     1, 48, 45, 472, 720, 7, 6, 49, 78, 566, 115, 8, 0, 
     22, 11, 344, 556, 5, 0, 86, 91, 929, 591]) 
+0

です。あなたのサンプルシェイプは少しオフですが、動作しました。 ありがとうございました! – Berserker

+0

@Berserkerあなたのケースでは 'm = 4'ですが、それはサンプルの実行にはあまりにも多くのデータを扱う巨大な配列を作成してしまいますので、短縮しました:) – Divakar

+0

" b "第3軸では3ではない。 – Berserker

0

です:

np.hstack([a, b, c]).flatten()

、B、Cを想定した。これは、働いていた3つの配列

関連する問題