2016-05-20 13 views
0

私はデータフレームを持っています。私はそれ自身で各列の内積を取り、これらを合計したいと思います。行列の内積

これまでのところ、私はこれをやった:

import pandas as pd 
import numpy as np 

np.random.seed([3, 1415]) 
df = pd.DataFrame(np.random.rand(10, 3).round(2), columns=['one', 'two', 'three']) 

inner_df = df.T.dot(df) 
print inner_df 
print 

tot = 0 
for i in range(len(inner_df)): 
    tot += inner_df.iloc[i, i] 

print "total =", tot 

      one  two three 
one 3.7611 3.4669 3.4766 
two 3.4669 3.6323 3.1140 
three 3.4766 3.1140 3.5214 

total = 10.9148 

これは私が必要なものを私を取得しますが、それは非常に不器用な感じ。これを行うにきれいな方法は何ですか?

+0

より良いコードレビューに尋ねる:http://codereview.stackexchange.com/ – Idos

+0

をコードは(ケースのように表示される)意図したとおりに動作する場合、これはコードレビューでOKでしょう。 – Phrancis

答えて

1

ベクトル化されたソリューションは、次のようになります。

import pandas as pd 
import numpy as np 

np.random.seed([3, 1415]) 
df = pd.DataFrame(np.random.rand(10, 3).round(2), columns=['one', 'two', 'three']) 

# pandas approach 
print df.mul(df).sum().sum() 

# numpy approach 
print np.square(df.values).sum() 

10.9148 
10.9148