gpt4 book ai didi

Python:从列表创建协方差矩阵

转载 作者:行者123 更新时间:2023-11-28 22:46:49 25 4
gpt4 key购买 nike

从以下三个列表到 Python 中的协方差矩阵(numpy 数组)是否有最快的方法?

Fac2 Fac1  VarCovar
a a 1.4
a b 0.7
a c 0.3
b a 0.7
b b 1.8
b c 6.3
c a 0.3
c b 6.3
c c 2.4

最佳答案

您可以使用 Pandas 轻松创建 3x3 矩阵。从上面的数组创建一个 DataFrame df 并使用 pivot_table 对第三列进行透视。

例如,如果您有以下字典 d 列表:

{'Fac1': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'],
'Fac2': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
'VarCovar': [1.4, 0.7, 0.3, 0.7, 1.8, 6.3, 0.3, 6.3, 2.4]}

像这样创建 DataFrame:

df = pd.DataFrame(d)

然后:

>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar')
Fac2 a b c
Fac1
a 1.4 0.7 0.3
b 0.7 1.8 6.3
c 0.3 6.3 2.4

在最后使用 values 属性从表中返回一个 NumPy 数组:

>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar').values
array([[ 1.4, 0.7, 0.3],
[ 0.7, 1.8, 6.3],
[ 0.3, 6.3, 2.4]])

如果你没有所有对,你可以用同样的方式进行,用转置索引对填充缺失值:

>>> d = {'Fac1': ['a', 'b', 'c' , 'b', 'c', 'c'], 
'Fac2': ['a', 'a', 'a' , 'b', 'b', 'c'],
'VarCovar': [1.4, 0.7, 0.3, 1.8, 6.3, 2.4]}
>>> df = pd.DataFrame(d)
>>> table = df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar')
>>> table.combine_first(table.T)
Fac2 a b c
Fac1
a 1.4 0.7 0.3
b 0.7 1.8 6.3
c 0.3 6.3 2.4

(我从 DSM 的回答 here 中得到了使用 combine_first 的想法)

关于Python:从列表创建协方差矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com