はじめに
このチュートリアルでは、強力なPythonライブラリであるNumPyを使用して配列の加算を行う際に、異なる形状の配列をどのように扱うかを探っていきます。1次元、2次元、またはそれ以上の多次元配列を扱っている場合でも、正確かつ効率的な配列操作を行うための手法を学ぶことができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
このチュートリアルでは、強力なPythonライブラリであるNumPyを使用して配列の加算を行う際に、異なる形状の配列をどのように扱うかを探っていきます。1次元、2次元、またはそれ以上の多次元配列を扱っている場合でも、正確かつ効率的な配列操作を行うための手法を学ぶことができます。
NumPyは、Pythonで科学計算を行うための強力なオープンソースライブラリです。このライブラリは、大規模な多次元配列や行列をサポートし、これらの配列に対して操作を行うための多数の高度な数学関数を提供します。NumPy配列は、多くの科学計算や機械学習タスクで使用される基本的なデータ構造です。
NumPy配列は、すべて同じ型の値のグリッドであり、正の整数のタプルによってインデックス付けされます。次元の数は配列のランク(階数)であり、配列の形状は各次元に沿った配列のサイズを示す整数のタプルです。
import numpy as np
## Create a 1D array
arr1d = np.array([1, 2, 3, 4, 5])
print(arr1d)
## Output: [1 2 3 4 5]
## Create a 2D array
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d)
## Output: [[1 2 3]
## [4 5 6]]
NumPy配列の形状(shape)とは、各次元に沿った要素の数を指します。これは、各軸に沿った配列のサイズを指定する正の整数のタプルとして表されます。
NumPy配列の形状は、shape
属性を使用して取得できます。
import numpy as np
## 1D array
arr1d = np.array([1, 2, 3, 4, 5])
print(arr1d.shape) ## Output: (5,)
## 2D array
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d.shape) ## Output: (2, 3)
## 3D array
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr3d.shape) ## Output: (2, 2, 2)
NumPy配列の形状は、reshape()
メソッドを使用して変更できます。新しい形状は、元の配列のサイズと互換性がある必要があります。
import numpy as np
## Reshape a 1D array to a 2D array
arr1d = np.array([1, 2, 3, 4, 5, 6])
arr2d = arr1d.reshape(2, 3)
print(arr2d)
## Output: [[1 2 3]
## [4 5 6]]
## Reshape a 2D array to a 3D array
arr2d = np.array([[1, 2], [3, 4], [5, 6]])
arr3d = arr2d.reshape(3, 1, 2)
print(arr3d)
## Output: [[[1 2]]
## [[3 4]]
## [[5 6]]]
NumPyはブロードキャスト(broadcasting)もサポートしており、これにより異なる形状の配列に対して演算を行うことができます。形状が互換性がない場合、NumPyは自動的に小さい方の配列の形状を大きい方の配列の形状に合わせます。
import numpy as np
## Broadcasting a 1D array with a 2D array
arr1d = np.array([1, 2, 3])
arr2d = np.array([[4, 5, 6], [7, 8, 9]])
result = arr1d + arr2d
print(result)
## Output: [[ 5 7 9]
## [ 8 10 12]]
2つのNumPy配列を加算する場合、配列の形状は互換性がある必要があります。これは、配列が同じ形状であるか、少なくとも1つの次元がサイズ1(シングルトン次元)であり、他の配列の形状にブロードキャストできることを意味します。
配列が同じ形状の場合、+
演算子を使用して要素ごとの加算を行うことができます。
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result = arr1 + arr2
print(result)
## Output: [[ 6 8]
## [10 12]]
配列が異なる形状の場合、NumPyは加算を行う前に配列を共通の形状にブロードキャストしようとします。ブロードキャストは、異なる形状の配列に対して演算を行うことができる強力な機能です。
import numpy as np
## Broadcasting a 1D array with a 2D array
arr1d = np.array([1, 2, 3])
arr2d = np.array([[4, 5, 6], [7, 8, 9]])
result = arr1d + arr2d
print(result)
## Output: [[ 5 7 9]
## [ 8 10 12]]
## Broadcasting a scalar with a 2D array
scalar = 10
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
result = scalar + arr2d
print(result)
## Output: [[11 12 13]
## [14 15 16]]
上記の例では、NumPyが自動的に1次元配列とスカラーを2次元配列の形状にブロードキャストし、加算を行うことができます。
配列の形状が共通の形状にブロードキャストできない場合、NumPyはValueError
例外を発生させます。
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6, 7], [8, 9, 10]])
result = arr1 + arr2
## ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
このような場合、加算を行う前に、一方または両方の配列の形状を変更または転置して、形状を互換性のあるものにする必要があるかもしれません。
このチュートリアルを終えることで、NumPyで加算を行う際に異なる形状の配列をどのように扱うかをしっかりと理解することができます。さまざまな配列構成をシームレスに処理できる堅牢で柔軟なPythonコードを書くための知識を身につけ、より複雑なデータ分析や科学計算タスクに取り組むことができるようになります。