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

如何在Python中通过稀疏矩阵乘法创建2个one-mode network

二部稀疏矩阵生成单模网络实现方案

你当前输出的是标题-标签二部邻接矩阵的可视化结果,通过矩阵乘法生成两类单模网络的实现方法如下:

核心原理

两类单模网络的构造逻辑:

  • 标题共现网络:两个标题的连边权重等于二者共享的标签数量,通过二部矩阵 × 二部矩阵转置计算得到
  • 标签共现网络:两个标签的连边权重等于二者共同出现的标题数量,通过二部矩阵转置 × 二部矩阵计算得到

完整实现代码

依赖scipy处理稀疏矩阵,避免密集矩阵带来的内存浪费:

import scipy.sparse as sp
import numpy as np

# 你的原始数据
data = [
    {"title": "title1", "tags": ["tag1", "tag2", "tag3"]},
    {"title": "title2", "tags": ["tag1"]},
]
tags = sorted({t for d in data for t in d["tags"]})
title_list = [d["title"] for d in data]

# 构造csr格式稀疏二部邻接矩阵,行对应标题,列对应标签
rows = []
cols = []
values = []
for row_idx, item in enumerate(data):
    for tag in item["tags"]:
        col_idx = tags.index(tag)
        rows.append(row_idx)
        cols.append(col_idx)
        values.append(1)
bi_adj = sp.csr_matrix((values, (rows, cols)), shape=(len(title_list), len(tags)))

# 生成标题单模网络邻接矩阵
title_adj = bi_adj @ bi_adj.T
# 可选:将对角元素(自身标签总数)置为0,忽略自环
np.fill_diagonal(title_adj.data, 0)

# 生成标签单模网络邻接矩阵
tag_adj = bi_adj.T @ bi_adj
# 可选:置零对角元素,忽略自环
np.fill_diagonal(tag_adj.data, 0)

# 打印结果验证
print("标题共现网络邻接矩阵:")
print(f"{'':<10}" + "".join(f"{t:<10}" for t in title_list))
for idx, row in enumerate(title_adj.toarray()):
    print(f"{title_list[idx]:<10}" + "".join(f"{v:<10}" for v in row))

print("\n标签共现网络邻接矩阵:")
print(f"{'':<10}" + "".join(f"{t:<10}" for t in tags))
for idx, row in enumerate(tag_adj.toarray()):
    print(f"{tags[idx]:<10}" + "".join(f"{v:<10}" for v in row))

输出示例解释

以你的测试数据为例,输出结果符合预期:

  • 标题共现矩阵中title1和title2的交叉值为1,代表两个标题共享1个标签
  • 标签共现矩阵中tag1和tag2、tag1和tag3的交叉值为1,代表这些标签对共同出现在1个标题中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:24:02