配列演算とブロードキャスト
ベクトル化された算術演算を行い、ブロードキャストの規則を理解します。
「配列演算とブロードキャスト」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
ベクトル化された算術演算
NumPyはPythonのループを使わず、配列全体に対して要素単位で算術演算を適用します。処理は最適化されたCコードで実行されます。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a * b) # [4 10 18]
print(a ** 2) # [1 4 9]ユニバーサル関数(ufunc)
NumPyのufuncは、Cレベルの関数を要素単位で適用します。例としてnp.sqrt、np.exp、np.log、np.sinなどがあります。
import numpy as np
x = np.linspace(0, np.pi, 5)
print(np.sin(x)) # [0. 0.707 1. 0.707 0.]
print(np.exp([1.0, 2.0, 3.0])) # [2.718 7.389 20.086]縮約演算
np.sum、np.mean、np.max、np.min、np.stdを使うと、配列をスカラーまたはより低次元の配列に縮約できます。
import numpy as np
m = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(m)) # 21
print(np.sum(m, axis=0)) # [5 7 9] — sum each column
print(np.sum(m, axis=1)) # [6 15] — sum each rowブロードキャストのルール
ブロードキャストは、データをコピーせずに小さい配列を大きい配列に合うよう拡張します。ルールは、次元を右からそろえ、サイズ1の次元を拡張することです。
import numpy as np
a = np.array([[1], [2], [3]]) # shape (3,1)
b = np.array([10, 20, 30]) # shape (3,)
print(a + b)
# [[11 21 31]
# [12 22 32]
# [13 23 33]]スカラー演算のブロードキャスト
スカラーは配列のすべての要素にブロードキャストされます。
import numpy as np
arr = np.arange(6).reshape(2, 3)
print(arr + 10)
# [[10 11 12]
# [13 14 15]]
print(arr * 0.5)
# [[0. 0.5 1. ]
# [1.5 2. 2.5]]比較演算とブール演算
比較演算はブール配列を生成します。&、|、~と組み合わせます(Pythonのand、or、notではありません)。
import numpy as np
arr = np.array([1, 5, 3, 8, 2])
print(arr > 3) # [False True False True False]
print(arr[(arr > 2) & (arr < 7)]) # [5 3]where()
np.where(condition, x, y)は、条件がTrueの位置ではxの要素を、Falseの位置ではyの要素を返します。
import numpy as np
arr = np.array([-2, 3, -1, 4, 0])
result = np.where(arr >= 0, arr, 0) # clip negatives to 0
print(result) # [0 3 0 4 0]軸に沿った集約
axis=を指定すると、多次元配列の特定の次元に沿って縮約できます。
import numpy as np
data = np.arange(12).reshape(3, 4)
print(data.mean(axis=0)) # mean of each column → shape (4,)
print(data.mean(axis=1)) # mean of each row → shape (3,)cumsumとdiff
np.cumsumは累積和を計算し、np.diffは連続する要素間の差分を計算します。
import numpy as np
prices = np.array([100, 110, 105, 115])
print(np.cumsum(prices)) # [100 210 315 430]
print(np.diff(prices)) # [10 -5 10] (daily changes)ベクトル化された文字列操作
np.charは、文字列配列に対するベクトル化された文字列操作を提供します。
import numpy as np
words = np.array(["apple", "banana", "cherry"])
print(np.char.upper(words)) # ['APPLE' 'BANANA' 'CHERRY']
print(np.char.startswith(words, "a")) # [True False False]Pythonリストとの性能比較
数値処理では、NumPyは同等のPythonループより10~100倍高速です。PythonインタープリターのオーバーヘッドなしにCで実行されるためです。
import numpy as np, time
n = 1_000_000
start = time.perf_counter()
python_sum = sum(i**2 for i in range(n))
print(f"Python: {time.perf_counter()-start:.3f}s")
arr = np.arange(n)
start = time.perf_counter()
numpy_sum = (arr**2).sum()
print(f"NumPy: {time.perf_counter()-start:.3f}s")確認問題
Shapeが(3,1)の配列にShapeが(3,)の配列を加算すると、結果のShapeはどうなりますか。
まとめ
NumPyの演算はPythonのループを使わず、Cで要素単位に実行されます。ブロードキャストは互換性のあるShapeをコピーせずに拡張します。特定の次元に沿って縮約するにはaxis=を使います。ufunc(np.sin、np.expなど)はCの速度で要素単位の演算を適用します。
よくある質問
「配列演算とブロードキャスト」レッスンは無料ですか?
はい。「配列演算とブロードキャスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「配列演算とブロードキャスト」で何を学びますか?
ベクトル化された算術演算を行い、ブロードキャストの規則を理解します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「配列演算とブロードキャスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。