numpy.append()

numpy.append()

numpy.append()

 numpy.append()配列の末尾に要素を追加する関数 です。

 numpy.append(arr, values, axis=None)

 arr:配列に相当するオブジェクト
 values:arrに適したサイズの配列
 axis:整数 (軸パラメータ)

 arr には配列 (ndarray) 以外にリストやタプルなども渡せます (このような簡易表現は NumPy のコードで普通に使われます)。戻り値は必ず配列となります。

# APP_01-1

import numpy as np

# [1 2 3] の末尾に 99 を追加
a = np.append([1, 2, 3], 99)

print(a)
[ 1  2  3 99]

 arr が 2 次元配列のケースを見てみましょう。axis を何も指定しなければ、arr をフラット化したあとで values が追加されます。

# APP_01-2

# 2次元配列を定義
x = np.array([[1, 2, 3],
              [4, 5, 6]])

# xをフラット化して末尾に[7 8 9]を追加
b = np.append(x, [7, 8, 9])

print(b)
[1 2 3 4 5 6 7 8 9]

 axis=0 を指定することで、末尾の行に追加できますが、values の次元や指定軸に沿ったサイズは arr と一致していなければなりません。

# APP_01-3

# xの末尾の行に[7 8 9]を追加
c = np.append(x, [[7, 8, 9]], axis=0)

print(c)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

 軸に沿ったサイズが揃っていないとエラーを発生します:

# APP_01-4

d = np.append(x, [[7, 8, 9]], axis=1)

print(d)
ValueError:
 all the input array dimensions except for
 the concatenation axis must match exactly

 縦サイズ 2 の配列であれば、x の末尾の列に追加できます。

# APP_01-5

# 縦ベクトルを定義
v = np.array([[7],
              [8]])

# xの末尾の列にvを追加
e = np.append(x, v, axis=1)

print(e)
[[1 2 3 7]
 [4 5 6 8]]

 

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

新品価格
¥4,536から
(2019/10/24 18:17時点)


 予め空白のリストを用意しておいて、for と numpy.append() を使って要素を追加する手法は NumPy のコードでよく登場します。もちろん、追加する要素がユニバーサル関数では簡単に表現できない場合に限ります。一例として数列

  x_1 = exp(0)
  x_2 = x1 + exp(x1)
  x_3 = x2 + exp(x2)

を計算するコードを書いてみます。

# APP_02

# 空白リストを定義
y = []

# xの初期値
x = 0

# x_{i}=x_{i-1}+exp(x_{i-1})
for i in range(3):
    x += np.exp(x)
    y = np.append(y, x)

print(y)
[ 1.          3.71828183 44.9118375 ]

 実を言えば、この種の計算も「集約」とよばれる手法を用いれば for を使わずに高速処理できますが、よほど大規模な計算でない限り、for と numpy.append() を使ったほうがわかりやすい (可読性の高い) コードになります。