精华内容
下载资源
问答
  • matlab生成邻接矩阵
    千次阅读
    2021-04-18 09:10:50

    如果你注意到,你创建的邻接矩阵有一个不同的模式。具体来说,它们是对称的和

    banded.你可以利用这个事实,使用

    DIAG函数(或

    SPDIAGS函数,如果你想做一个稀疏矩阵)轻松创建你的矩阵。下面是如何为每种情况创建邻接矩阵,使用上面的示例矩阵作为示例:

    4连接的邻居

    mat = [1 2 3; 4 5 6; 7 8 9]; %# Sample matrix

    [r,c] = size(mat); %# Get the matrix size

    diagVec1 = repmat([ones(c-1,1); 0],r,1); %# Make the first diagonal vector

    %# (for horizontal connections)

    diagVec1 = diagVec1(1:end-1); %# Remove the last value

    diagVec2 = ones(c*(r-1),1); %# Make the second diagonal vector

    %# (for vertical connections)

    adj = diag(diagVec1,1)+... %# Add the diagonals to a zero matrix

    diag(diagVec2,c);

    adj = adj+adj.'; %'# Add the matrix to a transposed

    %# copy of itself to make it

    %# symmetric

    你会得到以下矩阵:

    adj =

    0 1 0 1 0 0 0 0 0

    1 0 1 0 1 0 0 0 0

    0 1 0 0 0 1 0 0 0

    1 0 0 0 1 0 1 0 0

    0 1 0 1 0 1 0 1 0

    0 0 1 0 1 0 0 0 1

    0 0 0 1 0 0 0 1 0

    0 0 0 0 1 0 1 0 1

    0 0 0 0 0 1 0 1 0

    8连接的邻居

    mat = [1 2 3; 4 5 6; 7 8 9]; %# Sample matrix

    [r,c] = size(mat); %# Get the matrix size

    diagVec1 = repmat([ones(c-1,1); 0],r,1); %# Make the first diagonal vector

    %# (for horizontal connections)

    diagVec1 = diagVec1(1:end-1); %# Remove the last value

    diagVec2 = [0; diagVec1(1:(c*(r-1)))]; %# Make the second diagonal vector

    %# (for anti-diagonal connections)

    diagVec3 = ones(c*(r-1),1); %# Make the third diagonal vector

    %# (for vertical connections)

    diagVec4 = diagVec2(2:end-1); %# Make the fourth diagonal vector

    %# (for diagonal connections)

    adj = diag(diagVec1,1)+... %# Add the diagonals to a zero matrix

    diag(diagVec2,c-1)+...

    diag(diagVec3,c)+...

    diag(diagVec4,c+1);

    adj = adj+adj.'; %'# Add the matrix to a transposed

    %# copy of itself to make it

    %# symmetric

    你会得到以下矩阵:

    adj =

    0 1 0 1 1 0 0 0 0

    1 0 1 1 1 1 0 0 0

    0 1 0 0 1 1 0 0 0

    1 1 0 0 1 0 1 1 0

    1 1 1 1 0 1 1 1 1

    0 1 1 0 1 0 0 1 1

    0 0 0 1 1 0 0 1 0

    0 0 0 1 1 1 1 0 1

    0 0 0 0 1 1 0 1 0

    更多相关内容
  • 这个 Matlab 程序由 Ali Khaledi-Nasab @Ohio_University 编写在这里,我们使用 4 种不同类型的分支生成随机树网络。 主程序是“Tree_Generator_main.m” 打开此程序后,您可以在 4 种类型的分支之间进行选择。 1、...
  • 如何使用MATLAB绘制邻接矩阵

    千次阅读 2021-04-18 05:28:29
    大概可以用不到40行的Matlab来完成(看起来好像是others have tried)。但有时候,使用外部工具比在Matlab中完成所有工作更好。绘制图形的最佳工具可能是Graphviz,它附带一套用于绘制不同样式图形的工具。对于无向图...

    一种方法是使用某种静电斥力来编写自己的算法,就像在您链接的论文中一样。大概可以用不到40行的Matlab来完成(看起来好像是others have tried)。但有时候,使用外部工具比在Matlab中完成所有工作更好。绘制图形的最佳工具可能是Graphviz,它附带一套用于绘制不同样式图形的工具。对于无向图,要使用的图是neato。我不知道它使用哪种算法来分发节点,但我想它与您论文中的相似(其中一个参考文献甚至提到Graphviz!)。

    这些工具的输入是一个非常简单的文本格式,很容易使用Matlab生成。例如(这可以在Linux,你可能必须改变它在Windows中位):

    % adjacency matrix

    A = [1 1 0 0 1 0;

    1 0 1 0 1 0;

    0 1 0 1 0 0;

    0 0 1 0 1 1;

    1 1 0 1 0 0;

    0 0 0 1 0 0];

    % node labels, these must be unique

    nodes = {'A', 'B', 'C', 'D', 'E', 'F'};

    n = length(nodes);

    assert(all(size(A) == n))

    % generate dot file for neato

    fid = fopen('test.dot', 'w');

    fprintf(fid, 'graph G {\n');

    for i = 1:n

    for j = i:n

    if A(i, j)

    fprintf(fid, ' %s -- %s;\n', nodes{i}, nodes{j});

    end

    end

    end

    fprintf(fid, '}\n');

    fclose(fid);

    % render dot file

    system('neato -Tpng test.dot -o test.png')

    其产生的文件test.dot:

    graph G {

    A -- A;

    A -- B;

    A -- E;

    B -- C;

    B -- E;

    C -- D;

    D -- E;

    D -- F;

    }

    最后的图像测试。PNG(注意,你的邻接矩阵中列出的第一项与自身的连接,这说明随着环路节点A):

    7f81e1ff6c51ca92c0d8f06d53ab16f9.png

    作为一个更复杂的例子,你可以绘制巴基球作为gplot文档中:

    [A, XY] = bucky;

    nodes = arrayfun(@(i) num2str(i), 1:size(A,1), 'uni', 0);

    与结果(请注意,布局由NEATO完成的,它不使用XY):

    5601849d8d8442b6dd3fb51f37225ac0.png

    展开全文
  • Matlab实现Graph边列表生成邻接矩阵

    千次阅读 多人点赞 2020-07-11 06:09:27
    将N*2维矩阵表示的边列表转换成邻接矩阵。比如: Input:[ 1 2; 1 3; 1 4; 2 3; 3 4] #每行表示每条边的两个顶点 Output:[0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0] 这里给出两种实现方法 方法一 利用matlab函数...

    问题描述

    将N*2维矩阵表示的边列表转换成邻接矩阵。比如:

    Input:[ 1 2;
             1 3;
             1 4;
             2 3;
             3 4]  #每行表示每条边的两个顶点
    Output:[0 1 1 1
            1 0 1 0
            1 1 0 1
            1 0 1 0]
    

    这里给出两种实现方法

    方法一

    利用matlab函数里面的Graph相关的函数

    edges = [ 1 2;
              1 3;
              1 4;
              2 3;
              3 4];
    G = graph(edges(:,1),edges(:,2));
    adjMatrix = full(adjacency(G)); % adjacency(G)返回邻接矩阵的稀疏矩阵
    

    方法二

    另一种方法是利用matlab里面的sparse函数

    S = sparse(i,j,v,m,n)
    

    根据 i、j 和 v 三元组生成稀疏矩阵 S,以便 S(i(k),j(k)) = v(k)。max(i)×max(j) 输出矩阵为 length(v) 非零元素分配了空间。sparse将v中下标重复(在i 和 j 中)的元素加到一起。在这里i、j分别是edges的第一列和第二列。v为每条边的权重。m=n,为Graph中节点的个数。这里由于没有权重,所以v=[1 1 1 1 1]

    edges = [ 1 2;
              1 3;
              1 4;
              2 3;
              3 4];
    v = [1 1 1 1 1];
    adjMatrix = full(sparse(edges(:,1),edges(:,2),v,4,4)); %此时得到的邻接矩阵为上三角矩阵
    adjMatrix = adjMatrix + adjMatrix';
    
    展开全文
  • 邻接表转换为邻接矩阵matlab

    千次阅读 2021-12-19 16:13:22
    首先罗列一下摘自网上的对于邻接表和邻接矩阵的定义: 邻接表: 邻接表(Adjacency List)顾名思义,就是通过链表或者利用数组模拟链表的方式将图的相连接关系表示的一种方法,存储方法跟树的孩子链表示法相类似,...

    首先罗列一下摘自网上的对于邻接表和邻接矩阵的定义:

    邻接表:

    邻接表(Adjacency List)顾名思义,就是通过链表或者利用数组模拟链表的方式将图的相连接关系表示的一种方法,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。

    邻接矩阵:

    逻辑结构分为两部分:V和E集合,其中,V是顶点,E是边。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接矩阵又分有向图邻接矩阵无向图邻接矩阵

    在日常的数据处理过程中,我们常常需要需要将两者进行转化,这里主要附的是将邻接表(两列,且表中每行中的两列代表两点具有相连边)转换为邻接矩阵(这里代表以矩阵的形式表示所研究网络或者点关系中二者是否有关,如果相关,向量矩阵中对应为1;否则为0)

    具体处理过程为:

    1.首先将各个点进行编号,这里以公交站点为例,右边代表公交站点的实际名称,左边代编赋予的编号

    2.然后制作邻接表,每一行代表该两点具有相连接的边,或者代表两者相关

    3. 利用vlookup函数转换为编号的邻接关系

     

    4.将做好的邻接表输入matlab,导出的即为邻接矩阵

    附一下相关代码:

    function b = ainc2adj(x)
    %这里需要大家在工作区创建一个x,将我们上一步制作好的邻接表粘贴到工作区的x中
    if min(x(:))==0;
       x=x+1;
    end
     d=length(x);
     a=max(max(x));
     b=zeros(a,a);
    
    for i=1:d
        if x(i,1)==x(i,2);
           b(x(i,1),x(i,2))=0;
        else
           b(x(i,1),x(i,2))=1;
            b(x(i,2),x(i,1))=1;
        end
    end

    这里参照了一个做复杂网络博主写的文章,大家可以参照一下:如何建立复杂网络实体网络的Space L模型? - 知乎 (zhihu.com)

    展开全文
  • GPLOTD(A,XY) 使用下面描述的默认样式绘制由邻接矩阵 A 和点 xy 表示的有向图GPLOTD(A,XY,PARAM1,VAL1,...) 使用有效的参数名称/值对绘制有向图输入: A - NxN 邻接矩阵,其中 A(I,J) 非零当且仅当点 I 和 J 之间...
  • matlab 根据邻接矩阵作图【借鉴实操】》由会员分享,可在线阅读,更多相关《matlab 根据邻接矩阵作图【借鉴实操】(4页珍藏版)》请在人人文库网上搜索。1、Matlab中根据邻接矩阵做图function tu_plot(rel,control)%...
  • “利用Matlab实践关联矩阵与邻接矩阵的转换”假设网络图G=(V,E)的顶点集为V={v1,v2,…,vn},边集为E={e1,e2,…,em},则该网络图的关联矩阵L就是一个n×m矩阵,其中元素gij表示顶点vi与边ej相关联,而邻接矩阵...
  • 这里有一点一定要注意,因为为无向图,因此邻接矩阵一定要是关于对角线对称的,即Aij=Aji(且对角线上元素Aii=0),两点之间相互无向连接,有向图可以不为对称矩阵(有...% 生成数据,A和邻接矩阵的形势相似 A = magi
  • "该图的矩阵表示为:\n" ) ; mgraph = build_mgraph ( ) ; printf ( "\n*************************************************************\n" ) ; printf ( "dijkstra 算法:\n" ) ; Dijkstra ( mgraph , 0 ...
  • 使用matlab软件生成BA 网络,得到网络的邻接矩阵
  • 输入:adj 是邻接矩阵输出 el 是边列表
  • 用于绘制无向顶点边缘网络/图形的简单 GUI。 图形的邻接矩阵显示在命令行中。
  • 目录图的简介无向图(Graph)生成带权邻接矩阵求两点最短路径有向图(Digraph)生成带权邻接矩阵求最短路径 图的简介 图是拓扑学中的一个重要概念,分为无向图和有向图两种。图有两个重要属性,即点(Node)和边...
  • 这个代码功能是随机生成20个结点,并随机选择其中的某些点进行连接,表示相互间有通信,最终生成连通图。并将邻接矩阵和拉普拉斯阵输出成txt文档。
  • arcgis如何生成邻接矩阵/邻接关系分析

    千次阅读 热门讨论 2020-03-11 23:55:29
    作者:地理小子 ...来源:知乎 著作权归作者所有。...问题:arcgis如何生成邻接矩阵? 我现在有一个区域内的点和线的矢量信息,点位于线的交点上,想得到整个图的邻接矩阵。 比如这个图中: 有...
  • Matlab中根据邻接矩阵做图 function tu_plot(rel,control) %由邻接矩阵画图 %输入为邻接矩阵,必须为方阵; %第二个输入为控制量,0表示无向图,1表示有向图。默认值为0 r_size=size(rel); if nargin<2...
  • 怎么在excel中使用矩阵函数在excel中使用矩阵:1.矩阵乘法运算择G3:H4,公式:=MMULT(A3:B4,D3:E4)按Ctrl Shift Enter键,即输组公式。...3.求矩阵的中值,选择单元格D7,输入公式:=MDETERM(A3:B4)怎么把matlab中...
  • 然后有不同的评论数,如142个评论数构成一个邻接矩阵,143个评论数构成一个邻接矩阵…这些小的邻接矩阵最后构成一个全节点的大邻接矩阵。最后这个矩阵就是元路径 评论—评论数量—评论 的矩阵了。 伪代码: 1.在数据...
  • MatlAB中如何将CSV数据文件用邻接矩阵表示出来,可以转化为稀疏矩阵。
  • 这个代码功能是随机的生成20个结点,并随机选择其中的某些点进行连接, 表示相互间有通信,最终生成连通图。并将邻接矩阵和拉普拉斯阵输出成.txt文档。
  • 用于: A = BAgraph_dir(N,m0,m); 其中,N = 网络中的... 如果 i 连接到 j,则生成邻接矩阵在第 i 行、第 j 列中包含 1。 A 具有幂律度分布。 请耐心等待,因为该算法可能需要约 2-3 分钟来生成 N=300 的邻接矩阵
  • 超图是理解图的另一种方法。 它们提供了对二元网络底层聚类结构的更好洞察。 超图由 nxm 矩阵表示,其中 n 是超边的数量,m 是网络中的顶点数量。
  • 距离矩阵直接转为邻接矩阵 D = [0 1 2; 1 0 3; 2 3 0]; G = graph(D) 各点坐标转为距离矩阵,再转为稀疏矩阵 A = [1 2; 3 4; 5 6; 7 8]; % 第一点坐标为1,2,,以此类推 D = squareform(pdist(A)); % 转为距离...
  • %无向图的关联矩阵和邻接矩阵相互转换 %f=0:邻接矩阵->关联矩阵,F为邻接矩阵,W为关联矩阵 %f=1:关联矩阵->邻接矩阵,F为关联矩阵,W为邻接矩阵 if f==0 %sum(F,1):求F矩阵各列和,sum(F,2):求F矩阵各行和。...
  • 生成邻接矩阵

    2021-03-08 07:07:22
    我正在尝试从csv生成邻接矩阵 .csv包含2列,1表示用户,1表示项目 . 这两列构成了一个二分图,其中每个用户可以是多个项目的一部分,或者根本没有,但是同一组的节点之间没有边缘(同一个用户 - 项目对没有重复的条目...
  • 这里写自定义目录标题调用函数graph一步搞定 调用函数graph一步搞定 %Create a graph using the adjacency matrix.'OmitSelfLoops’忽略对角线, %'upper’指明上三角(即无向图) G = graph(A,‘upper’,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,304
精华内容 521
关键字:

matlab生成邻接矩阵