我正在做一些使用Python中非常可愛的pandas
庫的矩陣代數。由於能夠命名行和列,我非常喜歡使用Series和Dataframe對象。對角化熊貓系列
但是,在保持行/列名的同時,是否有一種整齊的方式來對角化系列?
考慮這個最低工作例如:
>>> import pandas as pd
>>> s = pd.Series(randn(5), index=['a', 'b', 'c', 'd', 'e'])
>>> s
a 0.137477
b -0.606762
c 0.085030
d -0.571760
e -0.475104
dtype: float64
現在,我可以這樣做:
>>> import numpy as np
>>> np.diag(s)
array([[ 0.13747693, 0. , 0. , 0. , 0. ],
[ 0. , -0.60676226, 0. , 0. , 0. ],
[ 0. , 0. , 0.08502993, 0. , 0. ],
[ 0. , 0. , 0. , -0.57176048, 0. ],
[ 0. , 0. , 0. , 0. , -0.47510435]])
但我很想找到生產數據框,看起來像的方法:
a b c d e
0 0.137477 0.000000 0.00000 0.00000 0.000000
1 0.000000 -0.606762 0.00000 0.00000 0.000000
2 0.000000 0.000000 0.08503 0.00000 0.000000
3 0.000000 0.000000 0.00000 -0.57176 0.000000
4 0.000000 0.000000 0.00000 0.00000 -0.475104
甚至可能(甚至會更好!):
a b c d e
a 0.137477 0.000000 0.00000 0.00000 0.000000
b 0.000000 -0.606762 0.00000 0.00000 0.000000
c 0.000000 0.000000 0.08503 0.00000 0.000000
d 0.000000 0.000000 0.00000 -0.57176 0.000000
e 0.000000 0.000000 0.00000 0.00000 -0.475104
這將是巨大的,因爲這樣我可以做矩陣運算,如:
>>> S.dot(s)
a 0.018900
c 0.368160
b 0.007230
e 0.326910
d 0.225724
dtype: float64
並保留名稱。
非常感謝,一如既往。 羅布
注:我知道,最後的例子'S.dot(S)'是非常愚蠢的,並可以用'實現S * s'但它只是作爲一個例子! – LondonRob