Numpy配列に配列を結合させる関数が幾つかあります.本記事ではよく使う(append,concatenate,stack,vstack,hstack)関数について使い方と解説をしております.
スポンサーリンク
配列の前後に行や列を追加するappend関数
Numpy配列の前後に要素行または要素列を追加するには,numpy.append関数を使います.
・1次元配列の後ろに配列を追加します.
[IN]
import numpy as np
a = np.arange(3)
b = np.arange(91, 94)
ab_append = np.append(a, b) #aとbを結合させる
print("a ", a)
print("b ", b)
print("ab_append", ab_append)
[OUT]
a [0 1 2]
b [91 92 93]
ab_append [ 0 1 2 91 92 93]
下図にサンプルプログラムの配列の追加を示します.
元配列の前に配列を追加するには,単純にappennd内の第一引数と第二引数の順番を逆にするだけです.先程のサンプルではab_append = np.append(b, a)になります.
append関数でarray_likeオプションを使う
append関数の第一引数と第二引数にarray_likeオプション(arange,linspaceなどの配列を作成する関数)を指定することができます.
第二引数のarange関数で配列を作成したものを配列aに追加します.
[IN]
import numpy as np
a = np.arange(3)
ab_append = np.append(a,np.arange(91, 94))#第二引数で配列を作成
print("a ", a)
print("b ", b)
print("ab_append", ab_append)
[out]
a [0 1 2]
b [91 92 93]
ab_append [ 0 1 2 91 92 93]
2次元配列の追加
2次元の配列を追加するには,append関数の第三引数axisを設定します.
axis=0 配列を行に追加
axis=1 配列を列に追加
・axis=0として2次元配列の行方向に配列を追加します.
[IN]
import numpy as np
a = np.zeros((2,2),int)
b = np.ones((2,2),int)
ab_append = np.append(a,b,axis=0)#axis=0で行方向に追加
print("a \n", a)
print("b \n", b)
print("\nab_append \n", ab_append)
[OUT]
a
[[0 0]
[0 0]]
b
[[1 1]
[1 1]]
ab_append
[[0 0]
[0 0]
[1 1]
[1 1]]
配列aの行方向に配列bが追加されました.
・axis=1として2次元配列の列方向に配列を追加します.
[IN]
import numpy as np
a = np.zeros((2,2),int)
b = np.ones((2,2),int)
ab_append = np.append(a,b,axis=1)#axis=1で行方向に追加
print("a \n", a)
print("b \n", b)
print("\nab_append \n", ab_append)
[OUT]
a
[[0 0]
[0 0]]
b
[[1 1]
[1 1]]
ab_append
[[0 0 1 1]
[0 0 1 1]]
配列aの列方向に配列bが追加されました.
複数のNupu配列をconcatenateで結合する
Numpy配列の既存の軸(次元)を元に配列を結合するのがconcatenate関数です.,軸(次元)を増やして結合するのがstack関数です.
・concatenate関数を使って2次元の配列を連結
2次元配列においてconcatenate関数の第二引数にaxis=0を渡すと配列を縦に追加し,axis=1を渡すと配列を横に追加します.
[IN]
import numpy as np
a = np.arange(11,17).reshape(2,3)
b = np.arange(21,27).reshape(2,3)
axis0 = np.concatenate([a,b], axis=0)
axis1 = np.concatenate([a,b], axis=1)
print("a \n", a)
print("b \n", b)
print("\ axis=0 \n", axis0) #配列縦側に追加
print("\ axis=1 \n", axis1) #配列横側に追加
[OUT]
a
[[11 12 13]
[14 15 16]]
b
[[21 22 23]
[24 25 26]]
\ axis=0
[[11 12 13]
[14 15 16]
[21 22 23]
[24 25 26]]
\ axis=1
[[11 12 13 21 22 23]
[14 15 16 24 25 26]]
stack関数を使って配列の次元を増やして結合
Numpy配列に新しい軸(次元)に従って配列を結合することがstack関数でできます.例えば2つの2次元配列を重ね合わせて3次元配列を作ることができます.
stack関数を使って2つの3行3列の配列を結合します.
[IN]
import numpy as np
a = np.arange(11,20).reshape(3,3)
b = np.arange(21,30).reshape(3,3)
axis0 = np.stack([a,b], axis=0)
axis1 = np.stack([a,b], axis=1)
print("a \n", a)
print("b \n", b)
print("\n axis=0 \n", axis0)
print("\n axis=1 \n", axis1)
[OUT]
[OUT]
a
[[11 12 13]
[14 15 16]
[17 18 19]]
b
[[21 22 23]
[24 25 26]
[27 28 29]]
axis=0
[[[11 12 13]
[14 15 16]
[17 18 19]]
[[21 22 23]
[24 25 26]
[27 28 29]]]
axis=1
[[[11 12 13]
[21 22 23]]
[[14 15 16]
[24 25 26]]
[[17 18 19]
[27 28 29]]]
下記に配列をstackした図を示します.
配列を結合させるvstack関数とhstack関数
numpy.vstack関数は配列を縦方向に結合します.numpy.concatenate関数で引数をaxis=0としたものと同じ効果があります.
numpy.hstack関数は配列を横方向に結合します.numpy.concatenate関数で引数をaxis=1としたものと同じ効果があります.
2個の2行2列の配列をvstack関数とhstack関数を使って結合させます
[IN]
import numpy as np
a = np.zeros((2,2),int)
b = np.ones((2,2),int)
vstack = np.vstack([a,b])
hstack = np.hstack([a,b])
print("a \n", a)
print("b \n", b)
print("\n vstack \n", vstack)
print("\n hstack \n", hstack)
[OUT]
a
[[0 0]
[0 0]]
b
[[1 1]
[1 1]]
vstack
[[0 0]
[0 0]
[1 1]
[1 1]]
hstack
[[0 0 1 1]
[0 0 1 1]]
・Python記事一覧
スポンサーリンク
コメント