代码是从github下载的增加了点注释,关于注释中的栗子,是自己随意创建的一个matrix,方便理解。

    def get_norm_adj_mat(self):# build adj matrixA = sp.dok_matrix((self.n_users + self.n_items, self.n_users + self.n_items), dtype=np.float32)# doc_matrix的策略是采用字典来记录矩阵中不为0的元素inter_M = self.interaction_matrix  # 获取用户-项目相互稀疏矩阵 ( , )=1 or =Noneinter_M_t = self.interaction_matrix.transpose()   # 转置data_dict = dict(zip(zip(inter_M.row, inter_M.col + self.n_users), [1] * inter_M.nnz))# zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,# 原本(inter_M.row, inter_M.col)对应了行和列,然后列加上了user(5)   0,0 ->1 现在 0,5-> 1# data_dict中存放的{(0, 5): 1, (3, 8): 1, (1, 6): 1, (0, 7): 1}data_dict.update(dict(zip(zip(inter_M_t.row + self.n_users, inter_M_t.col), [1] * inter_M_t.nnz)))# 此时data_dict中存放了{(0, 5): 1, (3, 8): 1, (1, 6): 1, (0, 7): 1, (5, 0): 1, (8, 3): 1, (6, 1): 1, (7, 0): 1}A._update(data_dict)# 更新之前创建的稀疏矩阵,将转置和非转置信息加入到稀疏矩阵中  A就相当于邻接矩阵# norm adj matrixsumArr = (A > 0).sum(axis=1)   # 返回的是每一行的为True的个数  m*1   sumArr度矩阵# add epsilon to avoid divide by zero Warning  添加 epsilon 以避免除以零警告diag = np.array(sumArr.flatten())[0] + 1e-7   # 返回是一个array,也就是sumArr平铺+1e-7 []diag = np.power(diag, -0.5)  # 求diag的-1/2次方D = sp.diags(diag)  # 把它真正转换为矩阵形式L = D * A * D  # 计算出来了拉普拉斯矩阵# covert norm_adj matrix to tensorL = sp.coo_matrix(L)row = L.rowcol = L.coli = torch.LongTensor([row, col])data = torch.FloatTensor(L.data)SparseL = torch.sparse.FloatTensor(i, data, torch.Size(L.shape))""" SparseL最后返回的是这个tensor(indices=tensor([[0, 0, 1, 3, 5, 6, 7, 8],[5, 7, 6, 8, 0, 1, 0, 3]]),values=tensor([0.7071, 0.7071, 1.0000, 1.0000, 0.7071, 1.0000, 0.7071,1.0000]),size=(12, 12), nnz=8, layout=torch.sparse_coo)"""return SparseL

jupyter notebook中的示例如下

import numpy as np
row = np.array([0, 3, 1, 0])
col = np.array([0, 3, 1, 2])
data = np.array([4,5,7,8])
import scipy.sparse as sp
from scipy.sparse import coo_matrix, csr_matrix
d1 = coo_matrix((data, (row, col)))
d1.toarray()

data_dict = dict(zip(zip(d1.row, d1.col + 5), [1] * d1.nnz))
data_dict

d2 = d1.transpose()
data_dict.update(dict(zip(zip(d2.row + 5, d2.col), [1] * d2.nnz)))
data_dict

 A = sp.dok_matrix((12, 12), dtype=np.float32) # 这里是随机创建的12*12的矩阵,实际应该是(user+item)*(user+item)A._update(data_dict)A.toarray() # 查看一下





拉普拉斯矩阵的python实现相关推荐

  1. 求网络的拉普拉斯矩阵(python)

    1. 导包 import networkx as nx import numpy as np import matplotlib.pyplot as plt 2. 求图的拉普拉斯矩阵 # 求图的拉普拉 ...

  2. python 邻接矩阵_阿里巴巴举荐,Python视频,免费分享,用python求解特征向量和拉普拉斯矩阵...

    学过线性代数和深度学习先关的一定知道特征向量和拉普拉斯矩阵,这两者是很多模型的基础,有着很重要的地位,那用python要怎么实现呢? numpy和scipy两个库中模块中都提供了线性代数的库linal ...

  3. python求解拉普拉斯矩阵

    首先,我们说一下流形学习:接着,我们重点介绍拉普拉斯特征映射算法:最后,本文将给出拉普拉斯特征特征映射算法代码. 流形学习 流形学习是一种非线性降维方法,能够从高维数据中发现低维流形结构,得到高维和低 ...

  4. 拉普拉斯矩阵(Laplacian matrix)的求解

    文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼:我热爱编程.热爱算法.热爱开源.所有源码在我的个人github :这博客是记录我学习的点点滴滴,如果您对 Python.Java.AI ...

  5. 有负权重边的图可以有拉普拉斯矩阵吗?

    在 看论文Temporal Regularized Matrix Factorization for  High-dimensional Time Series Prediction的时候,看到了这样 ...

  6. 拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient)

    作者:桂. 时间:2017-04-13  07:43:03 链接:http://www.cnblogs.com/xingshansi/p/6702188.html 声明:欢迎被转载,不过记得注明出处哦 ...

  7. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...

    深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...

  8. 图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵

    图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵  给定图G=(V,E)G=(V,E)G=(V,E),V表示图中的节点集合,假设其长度为NNN,图信号是一种描述V→RV→RV→ ...

  9. 一个使用numpy.ones()的矩阵| 使用Python的线性代数

    Ones Matrix - When all the entries of a matrix are one, then it is called as ones matrix. It may be ...

最新文章

  1. 享元模式 Composite
  2. java cpu 占用高问题定位
  3. linux xargs命令,xargs 命令教程
  4. 基于Spring+SpringMVC+Mybatis架构的开源博客
  5. linux 文件差异备份,Linux使用 tar命令-g参数进行增量+差异备份、还原文件
  6. 有没有测试直播源的软件,直播源检测验证管理工具(电脑直播源检测助手)V1.2 最新版...
  7. 检测UDP端口是否畅通方法
  8. 墙裂推荐!比Sci-Hub网站更好用的文献下载神器!解决所有文献下载烦恼
  9. Module ‘xxx‘ was created for incompatible target arm64-apple-ios9.0 Xcode12 错误解决
  10. oracle detele,Oracle中,一个Delete操作的流程
  11. 2021年教你如何用笔记本把Windows10系统安装到移动固态硬盘或U盘简易教程
  12. 电视html转vga没有声音,Windows10下使用Hdmi转VGA后只有图像没有声音的解决方案
  13. 写给0-3岁产品经理的第1封信:《产品经理的经济基础——逻辑思维能力》
  14. 量子计算的基本概念:量子位、量子纠缠、量子比特、量子算法
  15. 疫情下的生鲜配送,数字供应链发挥了重大作用
  16. 计算机版音乐教学反思,音乐教学反思(通用3篇)
  17. tiny服务器系列,温州中学TinyWebDB服务器正式启用
  18. 2020年3月笔记本选购记录
  19. Mac上Arduino ide首选项
  20. SuperMap iObject常见问题解答集锦(四)

热门文章

  1. 会员计费系统c语言_c语言课程设计报告 会员卡计费系统源代码
  2. PostgreSQL快速统计表行数
  3. 土地利用现状分类统计表生成
  4. Acrel-2000E/B配电室综合监控系统的应用
  5. 2018农历新年第一天
  6. QuickHand_PlayerActivity_Player_design_.m3u8视频播放格式(如快手短视频
  7. 支持飞书国际版,DataEase开源数据可视化分析平台v1.16.0发布
  8. 九日集训(每日打卡)第六天
  9. 你知道视频的水印怎么去吗?
  10. 微信公众号+Flask+新浪SAE 配置