さて
行列計算を一通り覚えたところで
numpyの関数を使ってみましょう
まずはライブラリをインポート、別名をnpとしておきます
sqrtは平方根を計算してくれます
引数には、数値か、数値のリスト、配列などが使えます
返ってくる値も引数と同じ型です
次に指数関数を求めます
正弦関数 (sin(x), サイン)
余弦関数 (cos(x), コサイン)
正接関数 (tan(x), タンジェント)


ランダムのため毎回生成される値は変わります
rand は一様分布の乱数を返します

rand
randn
ともに小数点で値が返ってきます
randint は整数値の配列が返ってきます
引数を調整すれば返る値の個数を変えられます
リストから重み付けランダム抽出
重み付けした確率でリストから取り出したい場合
random.choice で重み付け抽出が行えます
ランダムウォークのシミュレーションも行えます

配列の計算用の関数も沢山あります
round 四捨五入
trunc 切り捨て(小数部分を除く)
floor 切り捨て(小さい側の整数に丸め)
ceil 切り上げ
fix ゼロに近い整数に丸め
その他
abs 絶対値を返す
sign 値の符号を返す
modf 小数と整数に分けて返す
isnan NaNかどうかの判定を返す
isinf Infiniteかどうかの判定を返す
power べき乗を返す
max 最大値を返す
fmax 二つのうち大きい方を返す
min 最小値を返す
fmin 二つのうち小さい方を返す
参考資料
行列計算を一通り覚えたところで
numpyの関数を使ってみましょう
まずはライブラリをインポート、別名をnpとしておきます
import numpy as np
sqrtは平方根を計算してくれます
引数には、数値か、数値のリスト、配列などが使えます
array_n1 = np.arange(1,10).reshape(3,3) print(np.sqrt(25)) print(np.sqrt([2,3,4])) print(np.sqrt(array_n1))
5.0 [ 1.41421356 1.73205081 2. ] [[ 1. 1.41421356 1.73205081] [ 2. 2.23606798 2.44948974] [ 2.64575131 2.82842712 3. ]]
返ってくる値も引数と同じ型です
次に指数関数を求めます
exp = np.exp([0,1,2,3,4,5]) exp
array([ 1. , 2.71828183, 7.3890561 , 20.08553692, 54.59815003, 148.4131591 ])
なお定数 e も定義されておりnp.e2.718281828459045
となります次に対数関数は以下が定義されています
- e が底 (Log_e(x)) の
np.log(x) - 2 が底(Log_2(x))の
np.log2(x) - 10 が底(Log_10(x))の
np.log10(x)
それぞれこのようになりますnp.log([1,2,np.e, np.e ** 2])
array([ 0. , 0.69314718, 1. , 2. ])
np.log2([1,2,4,np.e, np.e ** 2])
array([ 0. , 1. , 2. , 1.44269504, 2.88539008])
np.log10([1,2,10,100,1000,np.e, np.e ** 2])
array([ 0. , 0.30103 , 1. , 2. , 3. ,
0.43429448, 0.86858896])
三角関数も存在します正弦関数 (sin(x), サイン)
余弦関数 (cos(x), コサイン)
正接関数 (tan(x), タンジェント)
引数 x にはラジアンを指定する必要がありますnp.sin([0,1,2,3,4])
array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ])
これだと分かりづらいので
図にしてみましょう
matplotlibを使って図を作成します
%matplotlib inline は図をjupyter notebookの中に
表示させるために必要なコードです
np.linspaceで複数値を作成し
plt.showで図を表示させます
import matplotlib.pylab as plt
%matplotlib inline
#startからendまでを個数で等分した値を返す
x = np.linspace(-5,5,100)
plt.plot(x, np.sin(x))
plt.xlabel('Angle [rad]')
plt.ylabel('sin(x)')
plt.axis('tight')
plt.show()

最大値が1,最小値が-1になっています
同様にcos , tan も表示させてみます
cos
x = np.linspace(-5,5,100) plt.plot(x, np.cos(x)) plt.xlabel('Angle [rad]') plt.ylabel('cos(x)') plt.axis('tight') plt.show()
tanx = np.linspace(-3.14, 3.14, 100) plt.plot(x, np.tan(x)) plt.xlabel('Angle [rad]') plt.ylabel('tan(x)') plt.axis('tight') plt.show()
タンジェントはちょっと特殊ですね
ここまでの関数の関係性をまとめてグラフにしてみます
x = np.arange(-2*np.pi, 2*np.pi, 0.25) sin = np.sin(x) cos = np.cos(x) tan = np.tan(x) exp = np.exp(x) log = np.log(x) # グラフ表示 plt.plot(x, sin,"-o",lw=2,alpha=0.7,label="sin(x)") plt.plot(x, cos,"-o",lw=2,alpha=0.7,label="cos(x)") plt.plot(x, tan,"-o",lw=2,alpha=0.7,label="tan(x)") plt.plot(x, exp,"-o",lw=2,alpha=0.7,label="exp(x)") plt.plot(x, log,"-o",lw=2,alpha=0.7,label="log(x)") plt.xlabel("$x$", fontsize=30) # x軸のラベル plt.ylabel("$y$", fontsize=30) # y軸のラベル plt.xlim([-4, 4]) # x軸の範囲 plt.ylim([-4, 4]) # y軸の範囲 plt.grid() # グリッドの表示 plt.legend(fontsize=10) # 凡例の表示 plt.show() # グラフの描画matplotlibによる可視化は非常に基本的なテクニックで値を配列に格納し、グラフ化することで
データが把握しやすくなるので
ぜひ覚えておきましょう
numpyには値を生成する関数も多く存在します
まずは標準正規分布に従うランダム値を返すrandn
from numpy.random import * import matplotlib.pyplot as plt Rand1 = randn(10000) # 標準正規分布で乱数を1万個生成 plt.hist(Rand1, bins=100) # 100本のヒストグラムを作成 plt.show()

ランダムのため毎回生成される値は変わります
rand は一様分布の乱数を返します
from numpy.random import * import matplotlib.pyplot as plt Rand2 = rand(10000) plt.hist(Rand2, bins=100) plt.show()

rand
randn
ともに小数点で値が返ってきます
randint は整数値の配列が返ってきます
引数を調整すれば返る値の個数を変えられます
randint(1,10,10)
array([8, 3, 8, 6, 4, 1, 8, 7, 9, 2])
リストから重み付けランダム抽出
重み付けした確率でリストから取り出したい場合
random.choice で重み付け抽出が行えます
from numpy import *
jk = ["チョキ","グー","パー"]
weight = [0.1,0.2,0.7] # 重み付け
for i in range(10):
print(random.choice(jk, p=weight)) # 指定した確率で1個を抽出
グー パー パー パー チョキ パー パー グー チョキ パー
ランダムウォークのシミュレーションも行えます
from numpy import * import matplotlib.pyplot as plt
rw = 1000 # 歩数 step = random.choice([-1,1],rw) # +1 or -1 をn個生成 position = cumsum(step) plt.plot(position)

配列の計算用の関数も沢山あります
round 四捨五入
trunc 切り捨て(小数部分を除く)
floor 切り捨て(小さい側の整数に丸め)
ceil 切り上げ
fix ゼロに近い整数に丸め
sample1 = np.array([-2.7, -1.3, -0.9, 0.4, 1.5, 0.1, 2.0]) np.round(sample1)
array([-3., -1., -1., 0., 2., 0., 2.])
np.trunc(sample1)
array([-2., -1., -0., 0., 1., 0., 2.])
np.floor(sample1)
array([-3., -2., -1., 0., 1., 0., 2.])
np.ceil(sample1)
array([-2., -1., -0., 1., 2., 1., 2.])
np.fix(sample1)
array([-2., -1., -0., 0., 1., 0., 2.])
その他
abs 絶対値を返す
sign 値の符号を返す
modf 小数と整数に分けて返す
isnan NaNかどうかの判定を返す
isinf Infiniteかどうかの判定を返す
power べき乗を返す
max 最大値を返す
fmax 二つのうち大きい方を返す
min 最小値を返す
fmin 二つのうち小さい方を返す
参考資料




コメントする