NumPyの配列作成

2021年10月7日

NumPyの配列作成時によく使われそうな関数を紹介します。Pythonの配列とも多少違うのでしっかりと確認しましょう。自分もしょっちゅう忘れるので備忘録も兼ねて記載します。

指定した数字で配列を作成

zeros

指定した配列または数字を全てゼロを挿入します。

書き方

zeros( 配列または数字, dtype=型 )

【例】
import numpy as np
np.zeros((2,4), dtype=int)
【実行結果】
array([[0, 0, 0, 0],
       [0, 0, 0, 0]])

zeros_like

指定した配列と同じ形状を持つ配列を作成。要素は全てゼロで挿入される。

書き方

zeros_like( a, dtype=none )

a配列を指定。ここで指定した配列と同じ形状の配列を作成。
dtype(オプション)出力するデータの型(int,floatなど)を指定

zeros_like 詳細

【例】
import numpy as np
 
a = np.random.rand(3,2)
b = np.zeros_like(a)
print(a)
print(b)
【実行結果】
[[0.41550344 0.78356554]
 [0.9014983  0.20246867]
 [0.38522346 0.52750318]]
[[0. 0.]
 [0. 0.]
 [0. 0.]]

ones

指定した配列または数字を1で埋め込みます。

書き方

ones( 配列または数字, dtype=型 )

【例】
import numpy as np
np.ones((5, 6), dtype=float)
【実行結果】
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])

full

指定した値を指定した配列または数字に挿入します(下記のコードの場合1.4142)。

書き方

full( 配列または数字, 挿入する値 )

【例】
import numpy as np
np.full((3, 5), 1.4142)
【実行結果】
array([[1.4142, 1.4142, 1.4142, 1.4142, 1.4142],
       [1.4142, 1.4142, 1.4142, 1.4142, 1.4142],
       [1.4142, 1.4142, 1.4142, 1.4142, 1.4142]])

一定間隔の数字で配列を作成

arange

指定した範囲の数字を一定の間隔で埋めていきます。
下記の場合0から26までの数字で2間隔で配列に埋め込んでいます。

書き方

arange( [開始する数字,] 終了する数字, [挿入する数字の間隔,] [dtype=型] )

【例】
import numpy as np
np.arange(0, 26, 2)
【実行結果】
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24])

linspace

指定した範囲の数字を一定の間隔で分割しています。
下記の場合0から2までの数字を5分割して配列に埋め込んでいます。

書き方

linspace( 開始する数字, 終了する数字, 分割する数)

【例】
import numpy as np
np.linspace(0, 2, 5)
【実行結果】
array([0. , 0.5, 1. , 1.5, 2. ])

乱数で配列を作る

random.random_sample 0~1の乱数

配列または数字で指定された次元に0~1の乱数を発生させます。

※random.random、random.ranf、random.sampleのこれらはrandom.random_sampleのエイリアスです。

書き方

random.random_sample( 配列やタプルまたは数字 )

【例】
import numpy as np
np.random.random_sample((3, 3))
【実行結果】
array([[0.15490586, 0.98565728, 0.34593982],
       [0.55123632, 0.58481885, 0.59000275],
       [0.5701705 , 0.63988713, 0.22034551]])

random.rand 0~1の乱数

指定された次元に0~1の乱数を発生させます。
random.random_sampleとの違いは引数の与え方です。

書き方

random.rand( d )

d(オプション)数字(次元数)
【例】
import numpy as np
np.random.rand(3,2)
【実行結果】
array([[0.01528079, 0.893044  ],
       [0.53571373, 0.58950037],
       [0.53957641, 0.76926684]])

random.normal 正規分布に従う乱数

指定した配列または数字に正規分布に従う乱数を埋め込みます。

書き方

random.normal( 平均, 標準偏差, 配列または数字 )

【例】
import numpy as np
np.random.normal(0, 1, (2, 2))
【実行結果】
array([[-0.11694555, -0.57693902],
       [-1.55712622,  0.23347421]])

random.randint 指定した範囲の乱数

指定した範囲の値で乱数を発生させる。

書き方

random.randint( low, high=None, size=None )

low開始する範囲の数字
high(オプション)終了する範囲の数字
size(オプション)次元のサイズ

random.randint 詳細

【例】
import numpy as np
np.random.randint(0, 10, (3, 3)) 
【実行結果】
array([[8, 9, 4],
       [3, 4, 5],
       [3, 9, 0]])

random.randn 標準正規分布の乱数

標準正規分布に従った乱数を発生させる。

書き方

random.randn( 配列または数字 )

【例】
import numpy as np
np.random.randn(2,3)
【実行結果】
array([[ 1.36458197,  0.40702114, -0.64840371],
       [ 1.9567457 ,  0.20099753, -1.24822658]])

random.choice 要素を選択

配列やリスト・タプルの中から要素をランダムに選択します。

書き方

random.choice( a, size=None, replace=True, p=None )

a配列
size(オプション)選択する個数
replace(オプション)重複のあり(True)・なし(False)
p(オプション)配列の選択確率を指定。デフォルトは一様分布。合計が1になるようにする。

random.choice 詳細

【例】配列から選択
import numpy as np
x = np.array([1,3,5,7,9,11,13])
 
a = np.random.choice(x)
b = np.random.choice(x,2)
 
print(a)
print(b)
【実行結果】
13
[11  7]
【例】確率を指定して配列から選択
import numpy as np
x = np.array([1,3,5,7,9,11,13])
 
a = np.random.choice( x, 3, replace=False, p=[0.1, 0.1, 0.3, 0.1, 0.1, 0.2, 0.1] )
print(a)
【実行結果】
[ 5 11  9]

random.uniform 指定範囲の乱数

指定した範囲で乱数を作成します。

書き方

random.uniform( low, high, size )

low(オプション)指定範囲の下限(初期値:0)
high指定範囲の上限(初期値:1)
size(オプション)出力する配列のサイズ

uniform 詳細

【例】
import numpy as np
 
print(np.random.uniform())
print(np.random.uniform(3))
print(np.random.uniform(2, 6))
print(np.random.uniform(1, 3, 3))
print(np.random.uniform(4, 5, [3,2]))
【実行結果】
0.2065014712443649
2.131755758713982
5.047370401908152
[2.84762668 2.55190818 2.96576773]
[[4.71231474 4.91989518]
 [4.96528695 4.59754732]
 [4.11576042 4.26972255]]

random.multivariate_normal 共分散の乱数

共分散に基づいた乱数を作成します。

書き方

random.multivariate_normal( mean, cov, size=None )

mean次元毎の平均値
cov共分散行列(配列)
size(オプション)作成する乱数の数

※共分散行列は次のように表されます。

\begin{equation*}
\left[
\begin{matrix}
S_{xx} & S_{xy} \\
S_{xy} & S_{yy} \
\end{matrix}
\right]
\end{equation*}

\begin{equation*}
S_{xx},S_{yy}・・・x,y各々の分散 \\
S_{xy}・・・xとyの共分散
\end{equation*}

multivariate_normal 詳細

【例】
import numpy as np
import matplotlib.pyplot as plt
 
mean = [0, 0]
cov = [[1, 2],
       [2, 5]]
X = np.random.multivariate_normal(mean, cov, 50)
plt.scatter(X[:,0], X[:,1]);
【実行結果】

同じ乱数を作る

random.seed

乱数を登録し同じ乱数を発生させる(乱数の初期化)。

書き方

random.seed( 数字 )
※数字の値は任意
※最初に設定した数字と後に初期化する数字は同じにする必要がある

import numpy as np
np.random.seed(0)
【例】
import numpy as np
np.random.seed(0) # 同じ乱数発生させる為に0を設定
 
np.random.randint(0, 10, (3, 3)) # 乱数を発生させる
array([[5, 0, 3],
       [3, 7, 9],
       [3, 5, 2]])
np.random.randint(0, 10, (3, 3)) # もう一度乱数を発生させる
array([[4, 7, 6],
       [8, 8, 1],
       [6, 7, 7]])
np.random.seed(0) # さきほど設定した0で初期化
np.random.randint(0, 10, (3, 3)) # 再度乱数を発生
# 最初と同じ結果で初期化されました
array([[5, 0, 3],
       [3, 7, 9],
       [3, 5, 2]])

random.RandomState

指定した番号の乱数をインスタンス化して乱数を発生される。

書き方

random.RandomState( 数字 )
※数字の値は任意

【例】
import numpy as np
 
r1 = np.random.RandomState(1234)
r1.randint(0,10,3)
【実行結果】
array([3, 6, 5])

seedとRandomStateの違い

RandomStateはインスタンス化して個々に乱数を発生させることができるが、seedはできない。

【例】
import numpy as np
 
r2 = np.random.seed(1234)
r2.randint(0,10,3)
【実行結果】
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-23-c997174b2cf2> in <module>
      2 
      3 r2 = np.random.seed(1234)
----> 4 r2.randint(0,10,3)

AttributeError: 'NoneType' object has no attribute 'randint'

その他の配列作成

eye

指定した数字の単位行列を生成する。

書き方

eye( 数字 )

【例】
import numpy as np
np.eye(3) 
【実行結果】
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

empty

指定した配列または数字に初期化されてない値を埋め込みます。メモリに既に残っている数字が挿入されます。

書き方

empty( 配列または数字 )

【例】
import numpy as np
np.empty(3) 
【実行結果】
array([1., 1., 1.])

asarray

ndarray引数にasarrayで配列を作成すると元の配列と作成された配列が同期される。

書き方

asarray( ndarray )

numpy.asarray 詳細

【例】
import numpy as np

a = np.array([1,2,3])
b = np.asarray(a)

# 元の配列に変更を加える
a[0] = 2

# 同期されていることが確認
print(a)
print(b)
【実行結果】
[2 2 3]
[2 2 3]

こちらのサイトを参考にしました。

NumPy配列

Posted by Bright_Noah