Edited at
SENSYDay 6

Numpy のよく使うスニペット集

More than 1 year has passed since last update.

当記事は、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]])