将虚拟变量表解析为相关矩阵

2024-10-01 04:46:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据帧:

df:
     A   B   C   D
#1   1   0   1   1
#2   0   0   1   1
#3   0   1   0   1

这可以理解为:在A,C和D中观察到#1事件,在C中观察到#2事件,在B,D中观察到#3事件 现在我想把这些数据解析为A,B,C,D之间的相关矩阵,如下所示:

    A   B   C   D
A   1   0   1   1
B   0   1   0   1
C   1   0   2   2
D   1   1   2   3

这可以理解为:A和B中都发生了0个事件,A和C中都发生了1个事件,依此类推

我可以用这个策略做到:

# input is df
correltation_matrix = pd.DataFrame(np.nan([4,4])
correltation_matrix[0, :] = df[['B', 'C', 'D']]*df['A'].sum()

然后对整个数据帧进行循环,但是如果变量的数量很高,那么它似乎是无效的。如何改进我的方法


Tags: 数据方法dataframedfinput数量isnp
2条回答

可以通过计算矩阵点积来实现这一点

correltation_matrix = (df.T).dot(df)

其中(df.T)df转置的

为了补充@ferhen的答案,我想补充一点,使用正确配置的Tensorflow,您可以显著优于np.dot。对于df.shape == (1000, 2000),我得到了以下计时(在谷歌Colab的免费层上)

tf.linalg.tensordot(df.T, df, axes=1) # 3.12 seconds
np.dot(df.T, df)                      # 49.9 seconds

相关问题 更多 >