NumPy

NumPy Quickstart チュートリアルに取り組む (7-1) トリックとヒント

短くて便利な例を挙げる。

自動リシェイピング

配列の寸法を変更するには、サイズのいずれかを省略することができる。

import numpy as np
a = np.arange(30)
b = a.reshape((2, -1, 3))  # -1は "必要なものは何でも "という意味
print(b.shape)
# (2, 5, 3)

print(b)
'''
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]
  [12 13 14]]

 [[15 16 17]
  [18 19 20]
  [21 22 23]
  [24 25 26]
  [27 28 29]]]
'''

ベクトルスタッキング

同じ大きさの行ベクトルのリストから2次元配列を作る。MATLABではこれは非常に簡単。xとyが同じ長さの2つのベクトルであれば、m=[x;y]を実行すればよい。NumPyでは、これらは、関数column_stack, dstack, hstack, vstackを介して動作する。例を示す。

x = np.arange(0,10,2)
y = np.arange(5)
m = np.vstack([x,y])
print(m)
'''
[[ 0 2 4 6 8 ]
 [ 0 1 2 3 4 ]]
'''

xy = np.hstack([x,y])
print(xy)
# array([0, 2, 4, 6, 8, 0, 1, 2, 3, 4])

ヒストグラム

配列に適用されたNumPyのヒストグラム関数は配列のヒストグラムとビンの辺のベクトルのペアを返す。※matplotlibにはヒストグラムを作成する関数(Matlabでは hist と呼ばれている)もある。これはNumPyのものとは異なり、主な違いは pylab.hist が自動的にヒストグラムをプロットするのに対して、numpy.histogramはデータを生成するだけであること。

import numpy as np
import matplotlib.pyplot as plt

rg = np.random.default_rng(1)
# 分散0.5^2、平均2の10000正規偏差のベクトルを構築する
mu, sigma = 2, 0.5
v = rg.normal(mu,sigma,10000)

# 50ビンで正規化されたヒストグラムをプロットする
plt.hist(v, bins=50, density=1)       # matplotlib version (plot)

# numpyを用いてヒストグラムを計算しプロットする
(n, bins) = np.histogram(v, bins=50, density=True)  # NumPy version (no plot)
plt.plot(.5*(bins[1:]+bins[:-1]), n)