2017-05-21 8 views
0

私はプロジェクトを実行しようとしています。ベクターセットをnumpy配列に保存します。私は新しいが追加されます私のアルゴリズムの各反復を通じてnumpy ndarrayに新しいベクトルを追加する

[[ 2.52416655e+05 -3.39300988e+05 -1.47104728e+05] 
[ -8.30154058e+10 1.11596039e+11 4.83823596e+10] 
[ -8.33917881e+10 1.11616209e+11 4.84208579e+10]] 

:最初にこのような単一のアレイを有することにより、

[[[ 2.52416655e+05 -3.39300988e+05 -1.47104728e+05] 
    [ 7.62810170e-02 4.71563079e-02 2.04445954e-02]] 

[[ -8.30154058e+10 1.11596039e+11 4.83823596e+10] 
    [ -2.50869296e+04 -1.54980220e+04 -6.72001994e+03]] 

[[ -8.33917881e+10 1.11616209e+11 4.84208579e+10] 
    [ -2.52465548e+04 -1.64620901e+04 -7.06724029e+03]]] 

は、私はこのようなND配列を持つようにしたいですこの配列のベクトルの集合。最初の反復の後、配列は最初の部分で示したnd配列のようになります。

これを行うための方法がありますか?これを行うより良い方法があるかどうか私に教えてください。どうもありがとう!!

+0

質問を理解するには、最初の部分の配列に質問の2番目の部分に配列を格納する手段が必要なのですか? – Jeremy

+0

最初のものがshape(3,2,3)の 'x'である場合。 2番目のものはshape(3,3)の 'x [:、0、:]]です。 – hpaulj

+0

@Jeremy、ご迷惑をおかけして申し訳ありません。基本的に2番目の部分は私が最初に持っていたものです。新しい配列を追加して最初の部分のようにしたいと思います。 –

答えて

0

。しかし、「開始時に」新しい軸上にnp.array加入:私は三重のネストされたリストで入力したのだかのように

In [429]: A = np.arange(9).reshape(3,3) 
In [430]: B = np.arange(9,18).reshape(3,3) 
In [431]: np.array([A,B]) # (2,3,3) array 
Out[431]: 
array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]]]) 

結果は同じです。 np.stackは、同じことをするよりも新バージョンのnp.concatenateであるか、別の新しい軸で結合することができます。私はaxis=1が何をしたいんだと思う:

In [432]: np.stack([A,B], axis=1) # a (3,2,3) array 
Out[432]: 
array([[[ 0, 1, 2], 
     [ 9, 10, 11]], 

     [[ 3, 4, 5], 
     [12, 13, 14]], 

     [[ 6, 7, 8], 
     [15, 16, 17]]]) 
In [433]: _[:,0,:]  # selecting from the 2nd axis to get A 
Out[433]: 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]) 

np.concatenateおよびその誘導体で遊んでみてください。

ああ、このように多数の配列を結合する必要がある場合は、リストe.g. [A、B、C、D、...] and apply theスタックで一度だけ収集する方が良いでしょう。 List appendは反復使用に適しています。

一部の構成では、トランスポーズまたは軸スワップを使用してさらに操作する必要があります。しかし、私はそれがここで必要とは思わない。

+0

ありがとう! –

0

Xがあなたの配列である場合は、次の

np.vstack([x[0] for x in X]) # loop and get first element 

または

np.vstack(X)[0::2] # get even rows 
+0

ありがとう、私はそれを試してみよう –

0

を行うことができますが、アレイから起動したとします

a 
Out[891]: 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]) 

そして、あなたは、配列を付加したいですb:

np.r_を使用して最終配列 'final'にそれらをマージしてから再構成することができます。

あなたが別の配列cを追加すると、あなたが同じことを行うことができます
final = np.r_[a,b] 

final.reshape((3,-1,3),order='F') 
Out[898]: 
array([[[ 0, 1, 2], 
     [ 9, 10, 11]], 

     [[ 3, 4, 5], 
     [12, 13, 14]], 

     [[ 6, 7, 8], 
     [15, 16, 17]]]) 

:既存の水平または垂直など、あなたは多くの軸にそれらを結合することができます2(またはそれ以上)の同一形状の配列と

c 
Out[899]: 
array([[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]) 

final = np.r_[final,c] 

final.reshape((3,-1,3),order='F') 
Out[901]: 
array([[[ 0, 1, 2], 
     [ 9, 10, 11], 
     [18, 19, 20]], 

     [[ 3, 4, 5], 
     [12, 13, 14], 
     [21, 22, 23]], 

     [[ 6, 7, 8], 
     [15, 16, 17], 
     [24, 25, 26]]]) 
+0

np.stackで注文する必要はありませんF – hpaulj

関連する問題