
こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!
この記事では、np.column_stackについてなかなか理解できなかったり、どういう風に結合するのかをド忘れしてしまうことが多々あったので、図解してみました!
僕と同じような現象に遭遇している人に届くと幸いです!
np.column_stack()のプログラムでの挙動
np.column_stackは、簡単に言えば配列どうしをくっつけてくれるメソッドです。
以下がnp.column_stackを使用したコードです。
import numpy as np
a = np.array((1,2,3))
b = np.array((4,5,6))
c = np.column_stack((a,b))
print(c)

出力結果を見れば、「なるほどね!そう結合するのか!」と分かるのですが、くっつけ方に馴染みがなく、いつもどのように結合をしているのかを忘れてしまいます。
そこで、まずは「column_stack」の意味を紐解いていくところから始めましょう。
column_stackの意味は?
「column」はデータサイエンスの世界でも「カラム」として使われていますが、要は「列」という意味を持ちます。
例えば、以下のような表があるとした時に、「列」は青の縦ラインと赤の横ライン、どちらを示すでしょうか。

答えは、「青の縦ライン」が列を表します。
今回の「column_stack」においてはcolumnが縦方向を表す、ということを覚えていてください。
次にstackですが、stackは動詞で「積み重ねる」という意味があります。
つまり、「column_stack」は合わせると「縦方向に積み重ねる」という意味になります。
column_stackを図示してみる
それでは、np.column_stackが実際にはどのような結合の仕方をしているのか、図解しながら見ていきましょう。
まずは、先ほどのコードにおける配列aと配列bを図示します。

今度はこれらの要素を縦方向に積み重ねていきます。
なお、次の2つの「順番」を崩さないように気をつけます。
- np.column_stack( ( a, b ) )なので、aが左、bが右の順に並ぶ
- a = [1, 2, 3] / b = [4, 5, 6]なので、上から順に1,2,3 / 4,5,6になるように並ぶ
以上の2つを守った形で縦方向に積み重ねると、以下の図のようになります。

あとはこれらの横の要素同士を1つの配列のペアにしてあげれば完成です。

これはnp.column_stackする配列が3つや4つに増えても同じようなルールで配列が作られます。

まとめ
今回の記事では、私がどうしても忘れがちなnp.column_stack()メソッドの機能を可視化して解説してみました!
この記事で、「そういえばnp.column_stackってああいう風に結合するんだったな!」とイメージで思い出せるようになる方が増えると僕としても嬉しいです!
コメント