プログラミング原人の進化ログ

プログラミング原人の進化論

オレ プログラミング ベンキョウ スル。マナンダ コト カク。

空のndarrayに列ベクトルや多次元配列を結合させる

最初に空の配列を作っておいて、後からそこに色々くっつけたい時があります。行ベクトルだと簡単に結合させられますが、このたび列ベクトルや多次元配列を結合させる方法を発見したのでメモ。

行(横)方向に連結する場合、hstackを使います。結合させたいものと同じ行数と同じ個数の空の配列を持った配列をあらかじめ作っておきます。

例:

a = np.array([[] for _ in range(3)])
b = np.array([1, 2, 3]).reshape(-1, 1)
c = np.hstack((a, b))
c

実行結果:

array([[1.],
       [2.],
       [3.]])

a = np.array([[] for _ in range(3)]).reshape(-1, 1)とするとうまくいかないことに注意。こっちの方が直感的には正しそうですが、理由はよくわかりません。
多次元配列も同様。

横方向はこんな感じでいけますが、縦方向に繋げる方法はわからず。横方向に結合させてから最後に転置するか、最初に0ベクトルを作ってvstackで縦方向に連結して最後に1行目を削除するか...。あんまりスマートではないかな。
横に連結する方法ももっと良いやり方があるかもしれませんが。