np.appendとは?NumPy配列に要素を追加する方法を初心者向けに解説

NumPyで配列に要素を追加したいときに使える関数がnp.append()です。

np.append()を使うと、既存のNumPy配列の末尾に値や配列を追加できます。

この記事では、Python初心者向けにnp.append()の基本的な使い方から、axisを指定して2次元配列に追加する方法、注意点までわかりやすく解説します。

np.appendとは

np.append()は、NumPyの配列に値を追加するための関数です。

基本的な書き方は次のとおりです。

np.append(arr, values, axis=None)
  • arr:元となる配列
  • values:追加する値
  • axis:追加する方向

NumPy公式ドキュメントでは、np.append()は配列のコピーを作成して値を追加し、新しいNumPy配列を返す関数と説明されています。元の配列そのものを書き換える関数ではありません。

np.appendの基本的な使い方

まずは1次元配列に値を追加してみましょう。

import numpy as np

a = np.array([1, 2, 3])

b = np.append(a, 4)

print(b)

実行結果は次のようになります。

[1 2 3 4]

aの最後に4が追加されています。

複数の値を追加する

np.append()では、1つの値だけでなく複数の値を追加できます。

import numpy as np

a = np.array([1, 2, 3])

b = np.append(a, [4, 5, 6])

print(b)

実行結果:

[1 2 3 4 5 6]

[4, 5, 6]が配列の末尾に追加されました。

np.appendでは元の配列は変更されない

np.append()を使うときに、初心者が特に注意したいのが「元の配列は変更されない」という点です。

import numpy as np

a = np.array([1, 2, 3])

b = np.append(a, 4)

print(a)
print(b)

実行結果:

[1 2 3]
[1 2 3 4]

このように、aはそのままで、追加後の新しい配列がbに入ります。公式ドキュメントでも、appendはin-placeで実行されず、新しい配列が作られると説明されています。

元の変数を更新したい場合

追加後の配列を元の変数に戻せば、結果的に元の変数を更新できます。

import numpy as np

a = np.array([1, 2, 3])

a = np.append(a, 4)

print(a)

実行結果:

[1 2 3 4]

np.appendで2次元配列に追加する

2次元配列でもnp.append()を使用できます。

ただし、2次元以上の配列ではaxisの指定が重要になります。

axis=0で行を追加する

例えば、次の2行2列の配列を用意します。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.append(a, [[5, 6]], axis=0)

print(b)

実行結果:

[[1 2]
 [3 4]
 [5 6]]

axis=0では、縦方向に行を追加します。

axis=1で列を追加する

axis=1を指定すると、横方向に列を追加できます。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.append(a, [[5], [6]], axis=1)

print(b)

実行結果:

[[1 2 5]
 [3 4 6]]

この場合、[5]と[6]が新しい列として追加されています。

axisとは

axisは、配列のどの方向に処理するかを指定する引数です。

2次元配列では、基本的に次のように考えるとわかりやすいでしょう。

axis 意味
axis=0 行方向に追加
axis=1 列方向に追加
axis=None 平坦化して追加

axisを指定しない場合はデフォルトでNoneとなり、元の配列と追加する値の両方が平坦化されてから追加されます。

axisを指定しない場合の注意点

例えば、2次元配列に対してaxisを指定せずにnp.append()を使ってみます。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.append(a, [[5, 6]])

print(b)

結果は次のようになります。

[1 2 3 4 5 6]

2次元配列の形が維持されず、1次元配列になっています。

そのため、2次元配列の形を維持したまま行や列を追加したい場合は、axis=0やaxis=1を指定します。

axis=0で追加するときの注意点

axisを指定する場合、追加する配列の形状を合わせる必要があります。

例えば、次の配列があります。

a = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

この配列にaxis=0で行を追加する場合、追加するデータは3列分必要です。

b = np.append(a, [[7, 8, 9]], axis=0)

print(b)

結果:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

一方、次のように1次元配列を渡すと、次元数が合わないためエラーになります。

b = np.append(a, [7, 8, 9], axis=0)

公式ドキュメントでも、axisを指定する場合は追加する値が適切な形状である必要があるとされています。

np.appendで文字列を追加する

np.append()では数値だけでなく、文字列を扱うこともできます。

import numpy as np

a = np.array(["Python", "Java"])

b = np.append(a, "Ruby")

print(b)

実行結果:

['Python' 'Java' 'Ruby']

np.appendで空の配列を追加する場合の注意

空の配列を追加すると、データ型が変わる場合があります。

import numpy as np

a = np.array([1, 2])

b = np.append(a, [])

print(b)
print(b.dtype)

NumPyの公式ドキュメントでは、このケースでは結果のデータ型がfloat64になる例が示されています。

そのため、数値配列を扱っている場合は、np.append()によってデータ型が意図せず変わっていないか確認することも重要です。

np.appendとnp.concatenateの違い

np.append()と似た処理にnp.concatenate()があります。

例えば、次のような1次元配列を連結できます。

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])

c = np.append(a, b)

print(c)

一方、np.concatenate()でも同様の処理ができます。

c = np.concatenate([a, b])

print(c)

単純に末尾へ値を追加するならnp.append()はわかりやすい一方、複数の配列を連結する処理を明確に書きたい場合はnp.concatenate()が適しています。

np.appendを繰り返し使うときの注意

np.append()は元の配列を書き換えるのではなく、新しい配列を作成します。

そのため、ループの中で大量のデータを1つずつ追加するような処理では、何度も新しい配列を作成することになり、効率が悪くなる可能性があります。

例えば、次のようなコードです。

import numpy as np

a = np.array([])

for i in range(1000):
    a = np.append(a, i)

大量のデータを追加するのであれば、Pythonのリストに一度データを蓄積してからNumPy配列に変換する方法もあります。

data = []

for i in range(1000):
    data.append(i)

a = np.array(data)

「最後にNumPy配列にする」と決まっているのであれば、このような方法も検討できます。

np.appendとPythonのlist.appendの違い

Pythonにはlist.append()というメソッドもあります。

名前は似ていますが、動作は異なります。

処理 np.append() list.append()
対象 NumPy配列 Pythonのリスト
書き方 np.append(a, x) a.append(x)
元データ 新しい配列を返す リスト自体を変更

特に「np.append()は元の配列を直接変更しない」という点は覚えておきましょう。

np.appendのまとめ

np.append()は、NumPy配列の末尾に値や配列を追加するための関数です。

基本的な使い方は次のとおりです。

np.append(配列, 追加する値)

2次元配列ではaxisを指定することで、行方向・列方向に追加できます。

# 行を追加
np.append(a, [[5, 6]], axis=0)

# 列を追加
np.append(a, [[5], [6]], axis=1)

また、axisを指定しない場合は配列が平坦化されること、元の配列は直接変更されないことにも注意が必要です。

NumPyでは、np.append()のほかにも、配列を結合するnp.concatenate()、指定位置に要素を挿入するnp.insert()、要素を削除するnp.delete()などがあります。用途に応じて使い分けると、NumPyの配列操作をより理解しやすくなります。


NumPy|結合・分割の関連記事

複数の配列をつなぐ・分けるための関数の記事です。

NumPy全体の使い方は「NumPyの使い方」、「NumPy関数一覧」でまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら