图的邻接矩阵一般定义是:节点与节点之间的边构成一个矩阵,比如:一张图片有N个节点,那么邻接矩阵的维度就是[N,N]大小,矩阵的每个值表示对应两个节点之间是否有边相连接,连接则值设为1,否则设为0(下图就是一张节点N=20的邻接矩阵)。
一、目的是将两个任意大小的邻接矩阵进行沿对角线拼接,并把空缺的部分填充上0,表示拼接的两个图的节点之间并无任何连接。
- 举例:N=5的一种邻接矩阵
- 举例:N=3的一种邻接矩阵
- 环境搭建:基于Windows中学习Deep Learning之搭建Anaconda+Pytorch(Cuda+Cudnn)+Pycharm工具和配置环境完整最简版
- 编译工具选择:Jupyter Notebook安装及使用指南、Jupyter Notebook自动补全代码配置
二、首先初始化一个N=5和3的邻接矩阵,并且各图的节点之间全连接,矩阵的值全为1。在将矩阵a和矩阵b选择下面两种方式进行沿对角线拼接。
- 横向拼接
- 纵向拼接
import numpy as np import torch a = torch.ones(5,5).numpy() # 5*5的邻接矩阵 b = torch.ones(3,3).numpy() # 3*3的邻接矩阵 print(a) print(b)
三、(横向拼接)然后将矩阵a和一个长为a大小,宽为b大小的零矩阵垂直拼接得到左矩阵,再将一个长为b大小,宽为a大小的零矩阵和b垂直拼接得到右矩阵,再将两者横向拼接。
lena = len(a) # 矩阵a的长度 lenb = len(b) # 矩阵b的长度 leftmaxtric = np.row_stack((a, np.zeros((lenb, lena)))) # 先将矩阵a和一个长为a大小,宽为b大小的零矩阵垂直拼接,得到左矩阵 rightmaxtric = np.row_stack((np.zeros((lena, lenb)), b)) # 再将一个长为b大小,宽为a大小的零矩阵和b垂直拼接,得到右矩阵 maxtirc = np.hstack((leftmaxtric, rightmaxtric)) # 将左右矩阵水平拼接 print(maxtirc)
四、(纵向拼接)先将矩阵a和一个长为b大小,宽为a大小的零矩阵水平拼接,得到上半边,再将一个长为a大小,宽为b大小的零矩阵和b水平拼接,得到下半边,再将两者纵向拼接。
lena = len(a) # 矩阵a的长度 lenb = len(b) # 矩阵b的长度 topmaxtric = np.column_stack((a, np.zeros((lena, lenb)))) # 先将矩阵a和一个长为b大小,宽为a大小的零矩阵水平拼接,得到上半边 floormaxtric = np.column_stack((np.zeros((lenb, lena)), b)) # 再将一个长为a大小,宽为b大小的零矩阵和b水平拼接,得到下半边 maxtirc = np.vstack((topmaxtric, floormaxtric)) # 将上下矩阵纵向拼接 print(maxtirc)