Numpy配列に配列を(append,concatenate,stack)関数で結合させる方法

Numpy

Numpy配列に配列を結合させる関数が幾つかあります.本記事ではよく使う(append,concatenate,stack,vstack,hstack)関数について使い方と解説をしております.

 スポンサーリンク

スポンサーリンク

配列の前後に行や列を追加するappend関数

Numpy配列の前後に要素行または要素列を追加するには,numpy.append関数を使います.

numpy.appendの関数の書式

numpy.append(arr,values,axis=None)
arr:array_like
  ここで指定したものが元の配列になりす.
values:array_like
  ここで指定した配列をarrに追加します.
axis:int,オプション
  valuesを追加する軸を指定します.

・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関数です.

numpy.concatenate関数の書式

numpy.concatenate( (a1,a2,…),axis=0 )
a1,a2,… :配列,array_likeのシーケンス
配列は軸に対応する次元を除いて,同じ形状である必要があります.

・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次元配列を作ることができます.

numpy.stack関数の書式

numpy,stack(arrays,axis=0)
arrays: 積み重ねる配列を指定する.同じ形状の配列である必要がある.
axis :追加する配列を積み重ねる軸を指定
axis=0:配列を垂直に積み重ねる
axis=1:配列を水平に積み重ねる

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記事一覧

トップページへ戻る

 スポンサーリンク

コメント

タイトルとURLをコピーしました