gpt4 book ai didi

python - 如何将相关列表转换为协方差矩阵?

转载 作者:太空狗 更新时间:2023-10-30 00:10:31 24 4
gpt4 key购买 nike

我有一个从具有这种形式的文本文件生成的相关性列表:

(前两个值表示哪些点之间是相关的)

2     1  -0.798399811877855E-01
3 1 0.357718108972297E+00
3 2 -0.406142457763738E+00
4 1 0.288467030571132E+00
4 2 -0.129115034405361E+00
4 3 0.156739504479856E+00
5 1 -0.756332254716083E-01
5 2 0.479036971438800E+00
5 3 -0.377545460300584E+00
5 4 -0.265467953118191E+00
6 1 0.909003414436468E-01
6 2 -0.363568902645620E+00
6 3 0.482042347959232E+00
6 4 0.292931692897587E+00
6 5 -0.739868576924150E+00

我已经有了另一个列表,其中包含与所有点相关的标准差。我如何在 numpy/scipy 中结合这两者来创建协方差矩阵?

它需要一种非常有效的方法,因为有 300 个点,所以大约有 50 000 个相关性。

最佳答案

假设此表名为df,第一列标记为A,第二列标记为B,相关值标记为相关性:

df2 = df.pivot(index='A', columns='B', values='Correlation')
>>> df2
B 1 2 3 4 5
A
2 -0.0798 NaN NaN NaN NaN
3 0.3580 -0.406 NaN NaN NaN
4 0.2880 -0.129 0.157 NaN NaN
5 -0.0756 0.479 -0.378 -0.265 NaN
6 0.0909 -0.364 0.482 0.293 -0.74

将其转换为对角线为 1 的对称方阵:

# Get a unique list of all items in rows and columns.
items = list(df2)
items.extend(list(df2.index))
items = list(set(items))

# Create square symmetric correlation matrix
corr = df2.values.tolist()
corr.insert(0, [np.nan] * len(corr))
corr = pd.DataFrame(corr)
corr[len(corr) - 1] = [np.nan] * len(corr)
for i in range(len(corr)):
corr.iat[i, i] = 1. # Set diagonal to 1.00
corr.iloc[i, i:] = corr.iloc[i:, i].values # Flip matrix.

# Rename rows and columns.
corr.index = items
corr.columns = items

>>> corr
1 2 3 4 5 6
1 1.0000 -0.0798 0.358 0.288 -0.0756 0.0909
2 -0.0798 1.0000 -0.406 -0.129 0.4790 -0.3640
3 0.3580 -0.4060 1.000 0.157 -0.3780 0.4820
4 0.2880 -0.1290 0.157 1.000 -0.2650 0.2930
5 -0.0756 0.4790 -0.378 -0.265 1.0000 -0.7400
6 0.0909 -0.3640 0.482 0.293 -0.7400 1.0000

如果您的 std dev 数据尚未采用矩阵形式,请对其执行相同的步骤。

假设这个矩阵被命名为df_std,那么你可以得到协方差矩阵如下:

df_cov = corr.multiply(df_std.multiply(df_std.T.values))

关于python - 如何将相关列表转换为协方差矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251737/

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