Scipyをつかって行列計算。
[参考]http://handasse.blogspot.com/2007/07/scipy.html
# usr/bin/env/ python # -*- coding: utf-8 -*- import scipy import scipy.linalg from numpy import * a = [ [1,3,5], [2,5,1], [2,3,8]] A = mat(a) #print "配列 a:", a #print "行列 A:", A print "行列→リスト", A.tolist() print "逆行列:" , A.I print "エルミート行列:", A.H print "転置行列:", A.T print "行列→配列:", A.A print "行列→1次元配列:", A.A1 print "2番目の行を取り出す:", A[1] print "2番目の列を取り出す:", A.T[1] print "共役行列:", A.conj() print "対角化:", A.diagonal() print "行列式:", linalg.det(A) print "固有値と固有ベクトル", linalg.eig(A) print "正規化", linalg.norm(A) #print "LU分解", linalg.lu(A) print "QR分解", linalg.qr(A) print "四則演算" print "A + A:", A+A print "A - A:", A-A print "A * A:", A*A print "A / A:", A/A print "A * A^-1 (= I:単位行列)", A*A.I
File "scipytest.py", line 25, in <module> print "LU分解", linalg.lu(A) AttributeError: 'module' object has no attribute 'lu'
平均と標準偏差を計算するプログラム
# usr/bin/env/ python # -*- coding: utf-8 -*- #heikin.py from scipy import * import scipy.linalg import numpy import math class Statistics: def mean(self,x_vec): #pythonでは第一引数にselfを指定しないといけない sum = 0 for x in x_vec: sum += x mean_value = sum * 1.0 / len(x_vec) return mean_value def sd(self,x_vec): mean_value = mean(x_vec) temp = 0 for x in x_vec: temp += pow((x - mean_value), 2) var_val = temp * 1.0 / len(x_vec) sd_val = pow(var_val,0.5) return sd_val
行列のある行に関する標準偏差を計算するプログラム
# usr/bin/env/ python # -*- coding: utf-8 -*- from scipy import * import scipy.linalg import numpy import math from heikin import Statistics #クラスの読み込み(.pyは削除する=heikin.pyとしない) c = Statistics() #CはStatisticsクラスのインスタンス a = [ [50,90,40,50,80], [80,70,80,70,80], [50,40,90,80,30], [80,40,80,90,50], [20,30,30,20,30] ] A = mat(a) su = [] for x in range(5): #print x vec = A.T[x] vec = vec.tolist() #vec[0]はベクトルをリストで表したもの #print vec[0] mean_value = c.mean(vec[0]) sd_vec = c.sd(vec[0]) su.append(sd_vec) print "標準偏差:", su