【发布时间】:2019-09-24 03:57:27
【问题描述】:
我有以下 pandas.DataFrame 对象,它提供因子之间的协方差:
import pandas as pd
df = pd.DataFrame({"factor1": ["A", "A", "A", "B", "B", "C"],
"factor2": ["A", "B", "C", "B", "C", "C"],
"covar": [-1.2, -1, 2, 3.4, -4, 6.2]})
我的目标是将 DataFrame 重新格式化为正半定协方差 numpy.ndarray。
我已经开发了一个可行的解决方案,但是速度非常慢:
unique_factors = df.factor1.unique()
F = pd.DataFrame(columns=unique_factors, index=unique_factors)
for index, row in df.iterrows():
F.loc[row["factor1"], row["factor2"]] = row["covar"]**2
F.loc[row["factor2"], row["factor1"]] = row["covar"]**2 #inefficient
F = F.to_numpy()
其输出为:
[[1.44 1.0 4.0 ]
[1.0 11.559999999999999 16.0 ]
[4.0 16.0 38.440000000000005]]
我希望我可以利用 numpy 的原生方法更有效地实现我的目标。至少我希望能够删除注释#inefficient 的行并反映关于对角线的上三角矩阵。任何帮助将不胜感激。
【问题讨论】:
标签: python pandas numpy matrix vectorization