NumPy の使い方とよく使うスニペットと具体例
np.mean
- 平均の計算
np.var
- デフォルトは
ddof=0(母分散) - 引数
ddof=1で不偏分散
np.std
- デフォルトは
ddof=0(母標準偏差) - 引数
ddof=1で不偏標準偏差
.astype()
- ndarray のデータ型を変更できる
np.array_split
- array を特定の数に分割する
- 割り切れない場合、最後の要素が少なくなる
chunkやbatchを作る際に便利
x = np.array([0, 1, 2, 3, 4, 5, 6, 7])
np.array_split(x, 3)
# [array([0, 1, 2]), array([3, 4, 5]), array([6, 7])]
np.prod
Python の積算の reduce が書きにくいため、np.prod で代替できる
np.array([2,3,5,7]).prod()
# 210
np.prod([2,3,5,7])
# 210
np.where
np.delete
- 指定した行または列のデータを消す
行を削除
a = np.array([[1,2], [3,4]])
np.delete(a, [0], axis=0)
# array([[3, 4]])
列を削除
a = np.array([[1,2], [3,4]])
np.delete(a, [0], axis=1)
# array([[2],
# [4]])
np.argsort
np.clip
- 値をクリップする
np.clip([-1, 0, 0.1, 3], 0, 1) # array([0. , 0. , 0.1, 1. ])
正規分布の生成
インターフェースと定義
s = np.random.normal(mu, sigma, size)
mu: 平均sigma: 標準偏差size: サイズ
具体例
f, ax = plt.subplots(nrows=1, ncols=1, figsize=(18, 4))
# Unimodal
sns.distplot(np.random.normal(10, 5, 10000), ax=ax, hist=False, color='blue')
ax.set_title('Unimodal', fontsize=14)
ax.set_yticklabels([])
ax.set_xticklabels([])
plt.show()
np.roll(シフト)
x = np.arange(10)
np.roll(x, 2)
# array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
np.roll(x, -2)
# array([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])
np.logical_and(AND を取る)
np.logical_and([1, 1], [1, 0])
# array([ True, False])
別の書き方として & を使う方法がある
a = np.array([1,1])
b = np.array([1,0])
a & b
# array([1, 0])
np.square
- 要素の二乗を計算する
np.square(np.array([1,2,3]))
# array([1, 4, 9])
np.diff
- 要素の差分を計算する
np.diff(np.array([1,2,3,4,5]))
# array([1, 1, 1, 1])
np.rot90
- 行列の90度回転
a = np.array([[1,2], [3,4], [5,6]])
a
# array([[1, 2],
# [3, 4],
# [5, 6]])
np.rot90(a)
# array([[2, 4, 6],
# [1, 3, 5]])
np.rot90(np.rot90(a))
# array([[6, 5],
# [4, 3],
# [2, 1]])
np.matrix
np.ndarrayのデータ構造とは異なるデータ型np.matrixはスライスしても、flatten しても必ず二次元構造を維持する
mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(mat)
"""
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
"""
print(mat[1, :]) # 横にスライス
"""
[[4 5 6]]
"""
print(mat[:, 1]) # 縦にスライス
"""
[[2]
[5]
[8]]
"""
print(mat[1, :].flatten()) # flattenしても二次元構造を維持する
"""
[[4 5 6]]
"""
arr = np.asarray(mat) # arrに変換