さて
行列計算を一通り覚えたところで
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.e
2.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()
sin

最大値が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()
cos


tan
x = 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()
tan

タンジェントはちょっと特殊ですね

ここまでの関数の関係性をまとめてグラフにしてみます
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()                     # グラフの描画
allgraph

matplotlibによる可視化は非常に基本的なテクニックで
値を配列に格納し、グラフ化することで
データが把握しやすくなるので
ぜひ覚えておきましょう


numpyには値を生成する関数も多く存在します
まずは標準正規分布に従うランダム値を返すrandn
from numpy.random import *
import matplotlib.pyplot as plt

Rand1 = randn(10000)        # 標準正規分布で乱数を1万個生成
plt.hist(Rand1, bins=100)   # 100本のヒストグラムを作成
plt.show() 
randn

ランダムのため毎回生成される値は変わります

rand は一様分布の乱数を返します
from numpy.random import *
import matplotlib.pyplot as plt

Rand2 = rand(10000) 
plt.hist(Rand2, bins=100) 
plt.show() 
rand

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)
rwalk


配列の計算用の関数も沢山あります
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 二つのうち小さい方を返す








参考資料
  • ライブドアブログ