今回は、配列を結合する方法の1つとして、オブジェクトであるnp.r_とnp.c_を用いた方法と使い方を解説します。np.c_はnp.r_の特殊な場合を抜き出したものなので、np.r_でもnp.c_と同じことができます。何も指定しない場合は、np.r_はhstack、np.c_はvstackと同様の使い方をすることができます。大きな特徴としてはスライス表記で配列を作ることができること、配列でないただの数値も配列として結合できることが挙げられます。どちらも関数ではなく、オブジェクトなので全て[]の中に配列や値を入れていくことで操作をしていきます。np.r_まずは、np.r_の方からみていきます。]の中に結合したい配列や結合の仕方について指定することができます。配列同士の結合(特に指定なし)特に結合の様式を指定しない場合、np.r_に含まれる配列はaxis=0の方向に結合することになります。これが最もよく使われるかたちとなっています。これはnp.hstack関数と同じ機能を持ちます。np.hstack関数については以下の記事で詳しく解説していますので参照してみてください。/features/numpy-stack.html実際のコードでみてみましょう。2次元配列を結合する。axis=1方向の要素数は一致していないと結合できないことに注意。cのaxis=1方向の要素数は3なので、それに合わせる。axis=0方向の要素数はcと同じ2である必要はない。exactlyここでの使い方はnp.hstackと全く一緒になります。スライス表記np.r_を使うことで、スライス表記によって1次元配列を作ることができます。start:stop:stepのstart,stop,step部分に値を入れていくことで連番であったり、等差数列を作ります。始点と終点になっており、stepは差になっています。step)と同じ意味合いを持ちます。デフォルトの値として、start=1、step=1となっており、stopの値だけ指定すればその値未満までの0から始まる整数の連番が生成されます。stepは虚数を指定することができ、その場合はstep=stepjだった場合、startからstopの区間(stopも区間に含まれる)をstep-1等分する数列を生成します。endpoint=1)と同じ意味合いを持つ表記になります。カンマで区切ることで他の数値単体や、一次元配列を結合することもできます。np.arange関数とnp.linspace関数は以下の記事で詳細な説明をしていますので気になる方はみてみてください。/features/numpy-linspace.htmlでは、スライス表記を交えてnp.r_を使ってみます。最後に数字や一次元配列を付け加えることもできる。-1'となっています。aは、どの軸(axis)の方向に沿って配列を結合するのかを指定します。bは、できあがる配列の次元数の最小値を指定します。cは、次元数の少ない配列の次元数の拡張を行った際、形状(shape)の表記として、どこに配列の最後の次元が置かれるべきかを指定します。形状(shape)を持つ二次元配列があったとします。この配列を他の(2,2,3)の形状(shape)を持つ三次元配列と結合したいとします。このとき、二次元配列は三次元に拡張しなければ結合できません。3)の形状で結合することができます。c=0であれば、元の配列の形状が先頭に詰められるので、(2,3,1)となります。cが示しているのは拡張前の形状(shape)がどこに配置されるかであることとなっています。ややこしくはなっていますが、マスターできれば次元の違う配列でもうまく結合することが可能となるので使いこなせるようになれば、かなり便利なオブジェクトになるかと思います。aの部分についてみていきます。aは結合する軸(axis)を指定します。ここでの軸番号は、できあがる配列における軸(axis)番号となっていることに注意してください。aのデフォルトの値は0です。これのshapeを確認すると、axis=1の要素数が加算されていることがわかる。aを指定しない場合はa=0となっている。これらの形状(shape)を一通り確認しておく。全て番号に対応する箇所の要素数が加算されていることがわかる。4)次に、bの値を変更していきます。bを変更することで、出力される配列の次元の最小数を指定することができます。2なら次元数(ndim)>=2となります。3であれば次元数(ndim)>=3となります。bの次元数より少ない配列はb次元まで拡張されてから結合の操作に入ります(拡張の仕方をcで指定しますが、デフォルトでは形状(shape)表記の先頭に1を足りない次元分だけ付け足していくことで拡張を行います)。6)最後にcの値を変更していきます。このデフォルトの値は-1となっており、形状(shape)は先頭に1が続いていくかたちになります。3)のようになっていました。cが一番理解しにくいところだと思います。わからなかったら、最初からreshape関数の機能を使って結合したい配列の形状(shape)を変更してから結合するのもできますので、無理に理解する必要はありません。コードが読みにくくなるのであまりオススメしません。3次元でも同様にできる。(3,)→(3,1,1)。1)行列(matrix)の指定2次元の行列(matrix)をnp.r_を使って生成する際は、文字列(string)として、'r'または'c'を最初に指定します。2次元行列の場合は、どちらを指定しても結果は同じですが、1次元で横ベクトルを生成したいときはrを、縦ベクトルを生成したいときはcを指定する必要があります。コードをみながら確認していきます。ここまでnp.r_についてみてきたわけですが、冒頭に述べたとおり、np.c_はnp.r_の特殊な場合について抜き出したものです。0']の関係が成り立ちます。2次元以上の配列で、最も最低の次元(axisの番号が一番大きい)の方向で配列を結合します。次元の拡張を各配列で行っている段階では、c=0となっているので、形状(shape)表記で元々の要素が先頭にあり、末尾に1を追加する形で拡張されます。数値だけと結合も可能。前半の2つの配列が2次元配列とならないとできないことに注意。ScipyDeepAgeではAIに関する厳選した内容を記事にしてお届けします。