2017-09-28 9 views
-2

動的にnumpyを使用して2D配列を水平方向に連結しようとしています。空の配列から始めて、if条件の結果に応じて2D配列を追加したいと思います。私は最終次元を知らないので、ループが始まる前に何も定義することはできません。私は2次元配列を持っていると仮定すると、C、B、Aと呼ばれる:Pythonで2D配列を即座に連結する方法は?

X = np.array([]) 
for name in modules: 
    if name = 'AAA': 
     X = np.append(X,A, axis = 1) 
    if name = 'BBB' 
     X = np.append(X,B, axis = 1) 
    if name = 'CCC' 
     X = np.append(X,C, axis = 1) 

このソリューションは間違っている理由は、私が実現する方法np.append作品を読んだ後。即座に連結を生成する簡単な方法はありますか? N:B:A、B、Cの列と行の数を知っています(行の数が同じです)が、if条件に依存するので、連結される行列の数はわかりません。連結順序は重要であり、コードで報告されるべきである。

+1

リスト内で配列を収集し、最後に1つの 'np.concatenate'を実行します。 – hpaulj

答えて

1

最初に、XABまたはCと同じ行数を持っていないので、あなたはそれらのいずれかとXを追加することはできません。小さな調整があります:

X = None 
for name in modules: 
    if name = 'AAA': 
     X = np.append(X,A, axis = 1) if X is not None else A 
    if name = 'BBB' 
     X = np.append(X,B, axis = 1) if X is not None else B 
    if name = 'CCC' 
     X = np.append(X,C, axis = 1) if X is not None else C 

希望すると便利です。

+0

それは動作します。ありがとうございました!! – Alex

2

名前を配列と照合するルックアップテーブルとして機能する辞書を作成できます。

mapper = {'AAA': A, 
      'BBB': B, 
      'CCC': C} 

X = np.hstack([mapper[name] for name in modules]) 
+1

彼は 'hstack'または' axis = 1'で 'concatenate'を望んでいます。それ以外は、よりクリーンなソリューションです。 – hpaulj

+0

あなたが正しいです、私はそれを変更しました。 –

関連する問題