とりあえずPythonで行列の演算
とにかく行列の掛け算さえできればいい!と思ってごちゃごちゃやってみた
参考にさせてもらったサイト
良いもの。悪いもの。
機械学習序曲(仮)
1つ目のサイトで味をしめたので、2つ目のサイトに乗ってたPythonのプログラムを実行してみた。
ERROR!
なんか(かなり)簡単に言うとnumpyのバージョンが違うらしい
ということで自分なりに書き換えて見ました〜
ただ書き換えただけのプログラムを載せるのは憚れるので
変更点だけ!
from Numeric import * from LinearAlgebra import *
↓
from scipy import * from numpy import *
A = init('A.dat', num) B = init('B.dat', num)
↓
A = init('A.dat', num) B = init('B.dat', num) A=matrix(A) B=matrix(B)
M = matrixmultiply(A,B)
↓
M = A*B
M = inverse(M)
↓
M = M.I
実行結果は、
multiply 1000x1000: 2.88000 inverse 1000x1000: 2.87000
matrixで変換しないと逆行列の方は計算出来ませんでした
でもmatrixもしかして遅い?かなり遅い?
積だけならmatrixに変換しないで実行したら0.02秒なんですよ!なんで!?
100倍はやい!!!
だめだ謎がなぞを呼ぶ・・・
追記
簡単な事でした
リストの状態で*を使って掛け算すると単純に同じ要素ごとに掛け算をしていて、行列の状態で*をするとそれが初めて行列の掛け算になるみたいです。だからmatraxに変換してないとあんなにはやかったんだなぁ(完全に勉強不足でした
一応確認
>>> A=array([[1,2],[3,4]]) >>> A array([[1, 2], [3, 4]]) >>> B=A >>> B array([[1, 2], [3, 4]]) >>> A*B array([[ 1, 4], [ 9, 16]]) >>> A=matrix(A) >>> A matrix([[1, 2], [3, 4]]) >>> B=matrix(B) >>> A*B matrix([[ 7, 10], [15, 22]])