【Python】for文とnp.arrayを組み合わせて使う
- for文とnp.arrayの概要
- 基本的なfor文の使い方
- np.arrayに対するfor文
- 多次元配列のループ処理
- for文を使わないベクトル化処理
- enumerateとzipの活用
- ループ処理の最適化
for文とnp.arrayの概要
Pythonでは `for` 文を使って `numpy` の `np.array` を反復処理できます。しかし、`numpy` ではベクトル化処理が推奨されるため、場合によっては `for` 文を使わない方が効率的です。
基本的なfor文の使い方
まず、Pythonの `for` 文の基本的な構文を確認しましょう。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
このコードではリスト `numbers` の各要素を `num` に代入し、順番に出力します。
np.arrayに対するfor文
`numpy` の `np.array` に対しても `for` 文を使うことができます。
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
for value in arr:
print(value)
通常のリストと同じように、各要素を順番に処理できます。
多次元配列のループ処理
多次元の `np.array` を `for` 文で処理する方法を見ていきます。
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
for row in arr_2d:
print(row)
この場合、`row` には各行の配列が代入されます。
要素単位で処理するには `flatten()` を使う方法もあります。
for value in arr_2d.flatten():
print(value)
for文を使わないベクトル化処理
`numpy` ではループを使わず、ベクトル演算を活用すると効率的です。
arr = np.array([1, 2, 3, 4, 5])
arr_squared = arr ** 2 # 各要素を2乗
print(arr_squared)
`for` 文を使わずに高速に計算できます。
enumerateとzipの活用
インデックスを取得しながら `for` 文を使うには `enumerate()` を使います。
arr = np.array([10, 20, 30])
for i, value in enumerate(arr):
print(f"Index {i}: Value {value}")
複数の配列を同時にループ処理するには `zip()` を使います。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
for a, b in zip(arr1, arr2):
print(a + b)
ループ処理の最適化
`numpy` では `for` 文よりも `vectorize` や `map` を使うことで高速化できます。
vectorized_function = np.vectorize(lambda x: x**2)
result = vectorized_function(arr)
print(result)
この方法により、`for` 文を使わずに要素ごとの処理ができます。