• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

numpy

date: 2021-01-30 excerpt: numpyの使い方とよく使うスニペットと具体例

tag: numpypython


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

  • /numpy-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に変換


numpypython Share Tweet