コレスポンデンス分析(1)下準備  行列の列和、行和を計算する

統計解析の手法の一つであるコレスポンデンス分析(対応分析、コレポン、CAとも呼ばれる)をpythonで実装する。
コレスポンデンス分析では、行和、列和、特異値分解(SVD)などを行うため、本題に入る前に、超簡単な行列演算で肩慣らしをする。

参考サイト
SciPyの使い方: 行列演算
http://handasse.blogspot.com/2007/07/scipy.html

リストオブジェクトの使い方
http://www.gesource.jp/programming/python/code/0017.html

コード

書いたというほどのものではないが...

from scipy import array
matrix = array( [[15,45,27,23],
                 [17,30,48,25],
                 [20,10,26,44],
                 [36,10,20,24],
                 [40, 5, 8,27]] );
print "Original matrix:"
print matrix

print "行",matrix[0,:] # 1行目を表示
print "列",matrix[:,0] # 1列目を表示

print "行和",sum(matrix[0,:]) # 1行目の総和を計算
print "列和",sum(matrix[:,0]) # 1列目の総和を計算
表示結果

上記コードを実行した結果。

$ ./correspondense_an.py
Original matrix:
[[15 45 27 23]
 [17 30 48 25]
 [20 10 26 44]
 [36 10 20 24]
 [40  5  8 27]]
行 [15 45 27 23]      
列 [15 17 20 36 40]
行和 110   <---1行目の和=15+45+27+23になっている
列和 128   <---1列目の和=15+17+20+36+40になっている
注意点

行列計算のモジュール"mat"で、以下のようにもできるが、行と列を対象に扱うことができない(みたい)。
なので、scipyのarrayのimportのほうが良さそうな気配。
(ちゃんとしたやり方あるのかもしれないが、少なくとも私は理解できなかったorz)

from scipy import linalg, mat, dot;                                                                                                  

matrix = mat( [[15,45,27,23],
               [17,30,48,25],
               [20,10,26,44],
               [36,10,20,24],
               [40,5,8,27]] );    

#print "行和",sum(matrix[0,:])  #これだとだめ                                      
print "列和",sum(matrix[:,0]) # OK

print "行和",sum(matrix[0,:].tolist()[0]) # 一回リストにしてsumすることは可能みたい。                                                                                      
#print "列和",sum(matrix[:,0].tolist())  # だめ。そもそも、列と行で形式が非対称になってるので。中見ればすぐ分かる。