当記事は、SENSY Advent Calendar 2017の6日目の記事です。
当記事は、Pandas のよく使うスニペット集のスニペットシリーズのNumpy版です。(アドベントカレンダーを埋めるために2017/12/14に記事を追加公開しました。)
SENSY Inc.の業務では、Pandas
とともに Numpy
がよく使われます。
まだ、Numpyを上手く使いこなせていないので、よく使っている書き方をスニペットとして記載していきます。
インポート
Numpy をインポートするには以下を実行します。
np
としてインポートすることが多いみたいです。
import numpy as np
Numpy行列の作成
np_array_1 = np.array([1, 2, 3])
np_array_1
# array([1, 2, 3])
np_array_2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np_array_2
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
DType の取得
np_array_1.dtype
# dtype('int64')
配列形状の取得
np_array_1.shape
# (3,)
np_array_2.shape
# (3, 3)
算術演算
np_array_1 + 1
# array([2, 3, 4])
np_array_1 - 1
# array([0, 1, 2])
np_array_1 * 3
# array([3, 6, 9])
np_array_1 / 2
# array([ 0.5, 1. , 1.5])
乱数を含む配列の生成
np.random.rand(3)
# array([ 0.97677458, 0.19336271, 0.66828087])
np.random.rand(3, 3)
# array([[ 0.00420696, 0.9480934 , 0.79849675],
# [ 0.1099369 , 0.55860276, 0.71633783],
# [ 0.00835927, 0.80184971, 0.62207637]])
特定のインデックス以降を取得
np_array_1[1:]
# array([2, 3])
順番を反転
np_array_1[::-1]
# array([3, 2, 1])
1次元に変換
np_array_2.ravel()
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
flatten
はコピーしたものを返却する。
np_array_2.flatten()
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
形状の変更
np_array_2.reshape((9, 1))
# array([[1],
# [2],
# [3],
# [4],
# [5],
# [6],
# [7],
# [8],
# [9]])
軸(axis)反転
np_array_2.transpose()
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
垂直方向に連結
np.vstack((np_array_1, np_array_2))
# array([[1, 2, 3],
# [1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
水平方向に連結
np_array_3 = np_array_2 * 3
np.hstack((np_array_2, np_array_3))
# array([[ 1, 2, 3, 3, 6, 9],
# [ 4, 5, 6, 12, 15, 18],
# [ 7, 8, 9, 21, 24, 27]])
NaNが含まれているかチェック
np_array_4 = np.array([np.nan, 2, 3])
np.any(np.isnan(np_array_1))
# False
np.any(np.isnan(np_array_4))
# True
配列内のNaNのインデックスを取得
np.where(np.isnan(np_array_4))
# (array([0]),)
0要素の配列を生成
np.zeros((3, 3))
# array([[ 0., 0., 0.],
# [ 0., 0., 0.],
# [ 0., 0., 0.]])
1要素の配列を生成
np.ones((3, 3))
# array([[ 1., 1., 1.],
# [ 1., 1., 1.],
# [ 1., 1., 1.]])
初期化されていない配列を生成
np.empty((3, 3))
# array([[ 1.48219694e-323, 2.96439388e-323, 4.44659081e-323],
# [ 5.92878775e-323, 7.41098469e-323, 8.89318163e-323],
# [ 1.03753786e-322, 1.18575755e-322, 1.33397724e-322]])
同形状で0要素の配列を生成
np.zeros_like(np_array_2)
# array([[0, 0, 0],
# [0, 0, 0],
# [0, 0, 0]])
内積を求めた配列を生成
np.dot(np_array_2, np_array_3)
# array([[ 90, 108, 126],
# [198, 243, 288],
# [306, 378, 450]])