LoginSignup
7
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-14

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3