Py

とりあえず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]])