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
numpyのarrayの条件が一致するindexを取り出す
numpyのarrayはまとめてクエリングができるので非常に高速
a = np.array([1,2,3,4,5,6,5,4,3,2,1])
a[np.where( (3 <= a) & (a<= 10) )]
# array([3, 4, 5, 6, 5, 4, 3]) が得られる
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[0], hist=False, color='blue')
ax[0].set_title('Unimodal', fontsize=14)
ax[0].set_yticklabels([])
ax[0].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に変換