ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

チュートリアル拾い読み (3):NumPy公式チュートリアル (3/5) [Python]

Rもたいして使いこなせてないのにPythonの勉強を始めてみました。色々と素晴らしいチュートリアルはありそうですが、目移りしてしまうので公式チュートリアルを拾い読みしていきます。

今回もNumPy公式チュートリアルの "NumPy: the absolute basics for beginners"を読んでいきます。

前回:

necostat.hatenablog.jp

配列の基本計算

四則計算

配列の形状が同じ場合、対応する要素同士で計算が実行されます。

a = np.array([1,2])
b = np.array([3,4])
print(a+b)  # 出力: [4 6]
print(a-b)  # 出力: [-2 -2]
print(a*b)  # 出力: [3 8]
print(a/b)  # 出力: [0.33333333 0.5]

集計関数

sum( )のような集計関数も適用できます。そのまま適用すれば全要素の集計をします。

a = np.array([[1,2,3],
              [4,5,6]])
a.sum()  #出力: 21

軸を指定することで、その軸に沿った計算をすることができます。例えば、axis=0とすると第1次元方向に集計します。

a = np.array([[1,2],
              [3,4]])
a.sum(axis=0)  # 出力: [5 7 9]
a.sum(axis=1)  # 出力: [ 6 15]

集計値を返してくれるメソッドの代表的なものを挙げておきます。

  • .max( ):最大値
  • .min( ):最小値
  • .sum( ):総和
  • .prod( ):総乗
  • .mean( ):平均
  • .std( ):標準偏差

形状が異なる配列を自動的に揃えて計算する(broadcasting)

NumPyでは配列の形状が異なっていても、(ある条件の下では)自動で形状を揃えて計算してくれます。この機能はブロードキャスティング(broadcasting)と呼ばれ、これにより形状をあまり意識せずに直感的な書き方で目的の計算を実行することができます。

例えば、(2,3)の2次元配列にスカラー値を足した場合、スカラーが(2,3)の配列に自動拡張されて足されます(つまり、全要素に10が足される)。

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

# 出力: 
[[11 12 13]
 [14 15 16]]

1次元配列を足す場合は、1行の長さが揃っている必要があります。 下の例では2次元配列の列数と、1次元配列の長さが揃っているので計算できていますが、1次元配列の長さが3以外だとエラーになります。

b = np.array([10,20,30])
print(a+b)

# 出力: 
[[11 22 33]
 [14 25 36]]

下の例は、(2,1)の2次元配列を足しています。行数が揃っているので、横方向に自動拡張されて計算が実行されています。

c = np.array([[10],
              [20]])
print(a+c)

# 出力: 
[[11 12 13]
 [24 25 26]]

図にまとめておきます。

おわりに

今回学んだこと:

  • 配列同士の計算
  • ブロードキャスティング

チュートリアルは読んだけど取り上げなかったもの:

  • 今回はありません

次回:

necostat.hatenablog.jp