You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas实现共现矩阵按对角线的归一化操作

共现矩阵按对角线归一化的Pandas实现方法

实现逻辑

按对角线归一化在共现分析场景下通常有两种实现方式,可匹配你在Excel中的计算逻辑选择:

  • 行归一化:每个元素除以其所在行的对角线值,计算后每行的对角线值为1,矩阵非对称
  • 对称归一化:每个元素除以sqrt(行对角值 * 列对角值),计算后所有对角线值为1,矩阵对称,是共现分析最常用的归一化方案

完整实现代码

import pandas as pd
import numpy as np

# 原有生成共现矩阵的逻辑
df = pd.DataFrame({'A':[1,1,1,0,1,1,1,1],
                    'B':[1,0,1,0,1,1,1,1],
                    'C':[0,1,0,1,1,0,1,1],
                    'D':[1,1,1,1,0,1,1,1],
                    'E':[0,1,1,1,1,1,1,0]})
df_asint = df.astype(int)
coocc = df_asint.T.dot(df_asint)

# 提取共现矩阵的对角线值
diag_vals = np.diag(coocc)

# 方案1:行归一化
coocc_norm_row = coocc / diag_vals[:, np.newaxis]
print("行归一化结果:")
print(coocc_norm_row.round(4))

# 方案2:对称归一化(共现分析常用)
coocc_norm_sym = coocc / np.sqrt(np.outer(diag_vals, diag_vals))
print("\n对称归一化结果:")
print(coocc_norm_sym.round(4))

输出示例

对称归一化的输出结果如下,符合对角线全为1的要求:

A       B       C       D       E
A  1.0000  0.9258  0.6761  0.8571  0.7715
B  0.9258  1.0000  0.5477  0.7715  0.6667
C  0.6761  0.5477  1.0000  0.6761  0.7303
D  0.8571  0.7715  0.6761  1.0000  0.7715
E  0.7715  0.6667  0.7303  0.7715  1.0000

内容的提问来源于stack exchange,提问作者AlbaTroels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:54:04