python创建元路径的邻接矩阵

此例构建的是用户-评分-用户的元路径。索引号即对应的用户id。


# 构建稀疏矩阵
import scipy.sparse as ss
from itertools import combinations, permutations
import numpy as np
import pandas as pd
def build_matrix(aa,l):#aa代表邻接矩阵索引号,l是最后要构建的邻接矩阵
    # aa = [0, 2, 3]
    A = list(permutations(aa, 2))  # aa代表的是邻接矩阵的索引号。
    print(A)  # 那些索引号的排列组合,即坐标,没有对角线。
    col = []
    row = []
    for i in range(len(A)):
        row.append(A[i][0])
        col.append(A[i][1])
    # print(row)
    # print(col)
    '''
    #https://www.cnblogs.com/hellojamest/p/11769467.html 关于稀疏矩阵知识详见此链接
    # data = [1] * len(A)
    # c = ss.coo_matrix((data, (row, col)), shape=(4, 4))  # 生成稀疏矩阵,shape是最后生成的矩阵大小。
    
    '''

    for i in range(len(row)):
        l[row[i],col[i]]=1
    # print(l.toarray())

#传数据,读取构建元路径所在列数据
#加载数据集
file_path = pd.read_excel(r"D:\BaiduNetdiskDownload\yelp\new10.xls",usecols=[8])#传进来当前我的文件夹路径,data_dir等是从命令行传进来的,即从配置文件那里

meta_data = []
# column_list = file_path.columns
index=0

#train_data中存储的所有评论
for d in file_path['rating']:
    meta_data.append(
       d)

# a=[1,2,1,1]#这就是要传入元路径
b=set(meta_data)#得到拥有的值
print(b)
newlist = []#将集合中的元素转到此列表中
l=ss.lil_matrix((len(meta_data),len(meta_data)))#最后想要创建的邻接矩阵
for i in b:
    newlist.append(i)#将集合转成列表

for i in range(len(newlist)):
    indices = []#存储索引
    start=0
    while newlist[i]!=-1:
        try:
            x = meta_data.index(newlist[i], start)
            indices.append(x)
            start = x + 1
        except:
            print(indices)
            build_matrix(indices,l)
            break
# print(l.toarray())#此时得到的邻接矩阵会在相关索引部分弄成对角线为1。
l[np.eye(len(meta_data),dtype=np.bool)]=0#将对角线变成0,即自身与自身的关联去掉
print(l.toarray())#得到最终的邻接矩阵

参考链接:
将对角线变成0

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值