LoginSignup
5
2

More than 5 years have passed since last update.

松尾研のDeep Learning基礎講座演習コンテンツをやってみた(chap2-Scipy)

Posted at

はじめるScipy

キーワード:逆行列、固有値、固有ベクトル、最適化
...おぉ、もうなんというか
いちおう全部知ってはいるのでとりあえず突っ込んでみよう。

準備

ライブラリはimportよー

# Scipyのモジュール
import scipy as sp

# 線形代数用のモジュール
import scipy.linalg as linalg

# 最適化計算(最小値)用のモジュール
from scipy.optimize import minimize_scalar

determinant-行列式-

行列式求められるとかすごいなー。手計算で4×4やらされたこともあったしこういうのはありがたみが深いですね。
linalgが線形代数用なんですね。

test_array=np.array([[1,-1,-1],[-1,1,-1],[-1,-1,1]])
print(linalg.det(test_array))
出力
-4.0

invertible matrix-逆行列-

こちらも便利でなかなか早い

print(linalg.inv(test_array))
出力
[[ 0.  -0.5 -0.5]
 [-0.5 -0.  -0.5]
 [-0.5 -0.5  0. ]]

積もnp.dotでラクチン、単位行列Iになることが確かめられます。

eigenvalue&eigenvector-固有値・ベクトル-

eig_value,eig_vector=linalg.eig(test_array)

print("固有値")
print(eig_value)
print("固有ベクトル")
print(eig_vector)

出力

固有値
[-1.+0.j  2.+0.j  2.+0.j]
固有ベクトル
[[ 0.577 -0.816  0.428]
 [ 0.577  0.408 -0.816]
 [ 0.577  0.408  0.389]]

ニュートン法で解く方程式

こんなことまでメソッドひとつでできる!!

f(x)=x^3+1 \\\
f(x)=0を解く

まず関数の定義

def test_function
    return(x*2-1)

では解きましょう

#import文
from scipy.optimize import newton
#計算
print(newton(test_function,0))

出力
1.0

解を出してくれました
虚数解があると上手くいかないのかな?

$x^3+1=0$や$x^3-1=0$だと0.00010000169277201161
がかえってきました

minimize_scalar-最小値求値-

scipyの最後にこんな機能も...

print(minimize_scalar(test_function,method="Brent"))

出力

     fun: -1.0
    nfev: 37
     nit: 36
 success: True
       x: 4.4020875904303335e-09

min:-1(x=0)に一致するような結果になってますね。

では機能紹介はここまで
のこるは練習問題!!

練習問題

問題1

A=np.array([1,2,3,1,3,2,3,1,2]).reshape(3,3)
print(A)
print('det:{:}'.format(linalg.det(A)))

問題2

print('inv:{:}'.format(linalg.inv(A)))
eig_value, eig_vector = linalg.eig(A)
print('eig_value:{val} \n eig_vector:\n{vec}'.format(val=eig_value,vec=eig_vector))

問題3

from scipy.optimize import newton
def practice_function(x):
return(x**3+2*x+1)
print(newton(practice_function,0))
print(practice_function(newton(practice_function,0)))

最後に

scipy,非常に便利な計算ライブラリですね
ニュートン法については次のページがいいと思います

[1]ニュートン法とは何か??ニュートン法で解く方程式の近似解 @PlanetMeron さん
https://qiita.com/PlanetMeron/items/09d7eb204868e1a49f49

5
2
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
5
2