numpy.appendは、配列の末尾に任意の要素を追加したい時に使う関数です。2次元配列の場合は行・列のどれをお追加するか、3次元配列の場合は奥行き・行・列のどれを追加するかなどを指定する必要があります。
実際のコードを見て確認していきましょう。
1. numpy.appendの使い方
まずは基本的な書き方を確認しましょう。
実際のコードで確認していきましょう。
1.1. 1次元配列に要素を追加する
以下のコードでは、配列arr1に要素を追加した新しい配列arr2を生成しています。なお、np.arangeは『numpy.arange – 色々な連番の配列を生成する方法』で解説しています。
import numpy as np
# 元の配列を生成
arr1 = np.arange(1, 6)
# arr1の末尾に要素を追加したarr2を生成
arr2 = np.append(arr1, [10, 20, 30, 40, 50])
# 確認
print('arr1: 元の配列\n', arr1, '\n')
print('arr2: 要素を追加した新しい配列を生成\n', arr2)
ご覧のように、元の配列arr1が変更されるのではなく、新しい配列を生成する点をご確認ください。
第一引数と第二引数に渡すデータの型はarray_likeオブジェクトなので、以下のようにリストやタプルを渡しても構いません。
# 第一引数と第二引数に渡すデータはリストやタプルでも可能です。
list = [100, 200, 300]
tuple = (1, 2, 3)
arr3 = np.append(list, tuple)
arr3
1.2. 2次元配列に要素を追加する
続いて、2次元配列に要素を追加する場合を見ていきましょう。
この場合、オプション引数axis=を指定しない場合は、一次元配列で戻ってきます。axis=0の場合は行を追加し、axis=1の場合は列を追加します。
それぞれ確認していきましょう。
1.2.1. axis=を指定しない場合は1次元配列で戻ってくる
まず、2次元以上の配列に要素を追加する場合でも、第三引数の「axis=」を指定しない場合は、1次元配列として戻されます。
以下のコードで実際に確認しておきましょう。
なお、コード内のreshapeメソッドについては『numpy.reshape – 配列の形状を変換』で解説しています。
import numpy as np
# 2次元配列を生成。
arr4 = np.arange(1, 13).reshape(3, 4)
# 2次元配列に要素を追加(axisを指定しない)
arr5 = np.append(arr4, [13, 14, 15, 16])
print('arr4: 元の配列\n', arr4, '\n')
print('arr5: axisを指定しない場合は1次元配列で生成\n', arr5)
元の配列が2次元以上であっても同じく、1次元配列で戻ってきます。
1.2.2. axis=0で行(横軸)を追加
axis=0を指定すると、行(横軸)を追加します。以下のコードでご確認ください。
arr6 = np.append(arr4, [[13, 14, 15, 16]], axis=0)
print('arr4: 元の配列\n', arr4, '\n')
print('arr6: np.append(arr4, [[13, 14, 15, 16]], axis=0)\n', arr6, '\n')
要素数が合わない配列を追加しようとするとエラーになります。
''' 元の配列の追加する配列の要素数が異なる場合はエラー '''
# 要素数4の配列に、要素数3の配列の行を追加することはできない。
arr6 = np.append(arr4, [[13, 14, 15]], axis=0)
行の要素数が同じであれば、2次元配に別の2次元配列を追加することもできます。
''' 2次元配列に2次元配列を追加 '''
arr7 = np.arange(0.1, 0.9, 0.1).reshape(2, 4)
arr8 = np.append(arr4, arr7, axis=0)
print('arr4: 元の配列\n', arr4, '\n')
print('arr7: 追加する配列\n', arr7, '\n')
print('arr8: 新しい配列 np.append(arr4, arr7, axis=0)\n', arr8)
1.2.3. axis=1で列(縦軸)を追加
axis=1を指定すると、列(縦軸)を追加します。以下のコードで実際に確認しましょう。
arr9 = np.arange(6).reshape(3, 2)
# 末尾に列(縦軸)を追加。
arr10 = np.append(arr9, [[10], [10], [10]], axis=1)
# それぞれの行の末尾に異なる要素を追加
arr11 = np.append(arr9, [[10], [20], [30]], axis=1)
print('arr9: 元の配列\n', arr9, '\n')
print('arr10: np.append(arr9, [[10], [10], [10]], axis=1)\n', arr10, '\n')
print('arr11: np.append(arr9, [[10], [20], [30]], axis=1)\n', arr11)
このように、追加する要素は、行ごとに個別に指定することができます。
なお、追加する要素の次元数(角括弧の書き方)が一致していなければエラーになります。
# 追加する要素の次元が異なるとエラーになります。
arr12 = np.append(arr9, [10, 20, 30], axis=1)
行の数が同じであれば、以下のコードのように、2次元配列に別の2次元配列を追加することもできます。
# 2次元配列に2次元配列を追加
arr13 = np.arange(0.1, 0.61, 0.1).reshape(3, 2)
arr14 = np.append(arr9, arr13, axis=1)
print('arr9: 元の配列\n', arr9, '\n')
print('arr13: 追加する配列\n', arr13, '\n')
print('arr14: np.append(arr9, arr13, axis=1)\n', arr14 )
1.3. 3次元配列同士の場合
3次元配列以上で使う場合は少ないと思いますが、一応見ておきましょう。
配列の次元が増えていくと、軸の数も増えていきます。3次元配列の場合は、0は奥行き、1は行(横軸)、2は列(縦軸)になります。参考に、以下のコードを貼っておきます。
''' 3次元配列同士 '''
arr14 = np.arange(12).reshape(3, 2, 2)
arr15 = np.arange(13, 25).reshape(3, 2, 2)
arr16 = np.append(arr14, arr15, axis=0)
arr17 = np.append(arr14, arr15, axis=1)
arr18 = np.append(arr14, arr15, axis=2)
print('arr14: 元の3次元配列\n', arr14, '\n')
print('arr15: 追加する3次元配列\n', arr15, '\n')
print('arr16: axis=0で奥行きを追加。np.append(arr14, arr15, axis=0)\n', arr16, '\n')
print('arr17: axis=1で行を追加。np.append(arr14, arr15, axis=1)\n', arr17, '\n')
print('arr18: axis=2で列を追加。np.append(arr14, arr15, axis=2)\n', arr18)
2. まとめ
numpy.append関数の使い方は以上の通りです。
1次元配列か、2次元以上の配列かで書き方が異なります。特にaxisの指定は最初は戸惑うかもしれません。実際にコードを書いていると、自然とスムーズに使えるようになりますので、そうなるまで手を動かしていきましょう。
また、以下の関数も一緒に学習しておくと良いでしょう。
コメント