Pythonで配列に要素を追加する方法
以下に日本語で自然な表現で言い換えてください。1つのオプションだけでかまいません。
イントロダクション
Pythonには組み込みの配列データ型がありませんが、配列を扱うために使用できるモジュールがあります。この記事では、配列とNumPyモジュールを使用して配列に追加する方法について説明します。配列モジュールは、整数や浮動小数点数の配列を作成する必要がある場合に役立ちます。NumPyモジュールは、配列上で数学的な操作を行う必要がある場合に役立ちます。
多くの場合、Listを使用して配列を作成することができます。Listは混合データ型などの柔軟性を提供し、それにもかかわらず配列の特性を全てもっています。Pythonでリストについてもっと学びましょう。
Note
配列モジュールを使用して要素を追加する
arrayモジュールを使うと、配列を+演算子で連結したり、append()、extend()、insert()メソッドを使って要素を追加することができます。
Syntax | Description |
---|---|
+ operator, x + y |
Returns a new array with the elements from two arrays. |
append(x) |
Adds a single element to the end of the array. |
extend(iterable) |
Adds a list, array, or other iterable to the end of array. |
insert(i, x) |
Inserts an element before the given index of the array. |
以下の例では、2つの配列を結合して新しい配列オブジェクトを作成する方法が示されています。
import array
# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# print the arrays
print("arr1 is:", arr1)
print("arr2 is:", arr2)
# create a new array that contains all of the elements of both arrays
# and print the result
arr3 = arr1 + arr2
print("After arr3 = arr1 + arr2, arr3 is:", arr3)
出力は次の通りです。
arr1 is: array(‘i’, [1, 2, 3]) arr2 is: array(‘i’, [4, 5, 6]) After arr3 = arr1 + arr2, arr3 is: array(‘i’, [1, 2, 3, 4, 5, 6])
前の例では、与えられた配列のすべての要素を含む新しい配列が作成されます。
以下の例は、append()、extend()、そしてinsert()メソッドを使用して配列に要素を追加する方法を示しています。
import array
# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# print the arrays
print("arr1 is:", arr1)
print("arr2 is:", arr2)
# append an integer to an array and print the result
arr1.append(4)
print("\nAfter arr1.append(4), arr1 is:", arr1)
# extend an array by appending another array of the same type
# and print the result
arr1.extend(arr2)
print("\nAfter arr1.extend(arr2), arr1 is:", arr1)
# insert an integer before index position 0 and print the result
arr1.insert(0, 10)
print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)
出力は:
arr1 is: array(‘i’, [1, 2, 3]) arr2 is: array(‘i’, [4, 5, 6]) After arr1.append(4), arr1 is: array(‘i’, [1, 2, 3, 4]) After arr1.extend(arr2), arr1 is: array(‘i’, [1, 2, 3, 4, 4, 5, 6]) After arr1.insert(0, 10), arr1 is: array(‘i’, [10, 1, 2, 3, 4, 4, 5, 6])
前の例では、各メソッドがarr1配列オブジェクト上で呼び出され、元のオブジェクトが修正されます。
NumPy配列への要素の追加を行う
NumPyモジュールを使用すると、NumPyのappend()およびinsert()関数を使用して、配列に要素を追加することができます。
Syntax | Description |
---|---|
numpy.append(arr, values, axis=None) |
Appends the values or array to the end of a copy of arr . If the axis is not provided, then default is None , which means both arr and values are flattened before the append operation. |
numpy.insert(arr, obj, values, axis=None) |
Inserts the values or array before the index (obj ) along the axis. If the axis is not provided, then the default is None , which means that only arr is flattened before the insert operation. |
numpy.append()関数は、背後でnumpy.concatenate()関数を使用しています。numpy.concatenate()を使用すると、既存の軸に沿って配列のシーケンスを結合できます。NumPyのドキュメントで配列操作のルーチンについて詳しく学びましょう。
Note
このセクションの例では、2次元(2D)配列を使用して、関数が提供される軸値に基づいて配列を操作する方法を強調しています。
numpy.append()を使用して配列に追加する。
NumPyの配列は、次元と形状で表されます。多次元配列に値や配列を追加する際には、追加される配列や値は同じ形状である必要があります(指定された軸を除く)。
2D配列の形を理解するには、行と列を考えてください。array([[1, 2], [3, 4]])は2行2列と等しい2, 2の形を持ちます。一方、array([[10, 20, 30], [40, 50, 60]])は2行3列と等しい2, 3の形を持ちます。
Pythonのインタラクティブコンソールを使用して、このコンセプトをテストしてください。
最初にNumPyモジュールをインポートし、その後、いくつかの配列を作成してその形状を確認してください。
NumPyをインポートした後、np_arr1を作成し、表示しましょう。
- import numpy as np
- np_arr1 = np.array([[1, 2], [3, 4]])
- print(np_arr1)
[[1 2] [3 4]]
np_arr1の形を確認してください。
- np_arr1.shape
(2, 2)
別の配列 np_arr2 を作成し、印刷してください。
- np_arr2 = np.array([[10, 20, 30], [40, 50, 60]])
- print(np_arr2)
[[10 20 30] [40 50 60]]
np_arr2の形を確認してください。
- np_arr2.shape
(2, 3)
異なる軸に沿って配列を追加してみてください。 2行3列の形状を持つ配列を、1軸目に沿って2行2列の形状を持つ配列に追加することはできますが、0軸目には追加できません。
np_arr1とnp_arr2を軸0に沿って連結し、行方向に追加する。
- np.append(np_arr1, np_arr2, axis=0)
値エラーが発生します。
Traceback (most recent call last): File “<stdin>”, line 1, in <module> File “<__array_function__ internals>”, line 5, in append File “/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py”, line 4817, in append return concatenate((arr, values), axis=axis) File “<__array_function__ internals>”, line 5, in concatenate ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3
3列幅の行を持つ配列を、2列幅の行を持つ配列に追加することはできません。
np_arr1とnp_arr2を軸1に沿って追加するか、列によって追加する。
- np.append(np_arr1, np_arr2, axis=1)
出力は次のようになります:
array([[ 1, 2, 10, 20, 30], [ 3, 4, 40, 50, 60]])
2行の高さを持つ列を持つ配列に、2行の高さを持つ列をもう1つ追加することができます。
以下の例は、numpy.append()関数を使用してNumPy配列に要素を追加する方法を示しています。
import numpy as np
# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
# append an array to the end of another array and print the result
# both arrays are flattened before appending
append_axis_none = np.append(np_arr1, np_arr2, axis=None)
print("append_axis_none is:\n", append_axis_none)
# append an array to the end of another array along axis 0 (append rows)
# and print the result
append_axis_0 = np.append(np_arr1, np_arr2, axis=0)
print("append_axis_0 is:\n", append_axis_0)
# append an array to the end of another array along axis 1 (append columns)
# and print the result
append_axis_1 = np.append(np_arr1, np_arr2, axis=1)
print("append_axis_1 is:\n", append_axis_1)
出力は:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] append_axis_none is: [ 1 2 3 4 10 20 30 40] append_axis_0 is: [[ 1 2] [ 3 4] [10 20] [30 40]] append_axis_1 is: [[ 1 2 10 20] [ 3 4 30 40]]
前の例は、numpy.append()関数が2次元配列の各軸に対してどのように機能し、結果の配列の形がどのように変化するかを示しています。軸が0の場合、配列は行ごとに追加されます。軸が1の場合、配列は列ごとに追加されます。
numpy.insert()を使用して配列に追加する
numpy.insert()関数は、与えられたインデックスの前に、別の配列または値を指定された軸に沿って挿入し、新しい配列を返します。
numpy.append()関数とは異なり、axisが指定されていない場合やNoneで指定された場合、numpy.insert()関数は最初の配列のみをフラット化し、挿入する値や配列自体をフラット化しません。axisを指定せずに2次元配列を2次元配列に挿入しようとすると、ValueErrorが発生します。
次の例は、numpy.insert()関数を使用して要素を配列に挿入する方法を示しています。
import numpy as np
# create array objects (integers)
np_arr1 = np.array([[1, 2], [4, 5]])
np_arr2 = np.array([[10, 20], [30, 40]])
np_arr3 = np.array([100, 200, 300])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
print("np_arr3 is:\n", np_arr3)
# insert a 1D array into a 2D array and then print the result
# the original array is flattened before insertion
insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None)
print("insert_axis_none is:\n", insert_axis_none)
# insert an array into another array by row
# and print the result
insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0)
print("insert_axis_0 is:\n", insert_axis_0)
# insert an array into another array by column
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)
出力は次の通りです:
np_arr1 is: [[1 2] [4 5]] np_arr2 is: [[10 20] [30 40]] insert_axis_none is: [ 1 100 200 300 2 4 5] insert_axis_0 is: [[ 1 2] [10 20] [30 40] [ 4 5]] insert_axis_1 is: [[ 1 10 30 2] [ 4 20 40 5]]
前の例では、2D配列を別の2D配列に軸1に沿って挿入する場合、np_arr2内の各配列は個別の列としてnp_arr1に挿入されます。もし、全体の2D配列を別の2D配列に挿入したい場合は、objパラメータのインデックス値の周りに角括弧を含めて、その位置の前に全体の配列が挿入されるように示す必要があります。角括弧を使用せずにnumpy.insert()を使用すると、与えられたインデックスの前に列として配列が順番に積み重ねられます。
以下の例では、obj(index)パラメータの周りに角括弧がある場合とない場合の出力が示されています。
import numpy as np
# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
# insert an array, column by column, into another array
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)
# insert a whole array into another array by column
# and print the result
insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1)
print("insert_index_axis_1 is:\n", insert_index_axis_1)
出力は次のとおりです:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] insert_axis_1 is: [[ 1 10 30 2] [ 3 20 40 4]] insert_index_axis_1 is: [[ 1 10 20 2] [ 3 30 40 4]]
前の例は、numpy.insert()がインデックスの表記に基づいて配列に列を挿入する方法を示しています。
結論
この記事では、配列とNumPyモジュールを使用して要素を配列に追加しました。NumPyのチュートリアルやPythonのチュートリアルをさらに学習してください。