Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中是否有一个函数可以从索引向量生成邻接矩阵?_Matlab_Graph_Adjacency Matrix - Fatal编程技术网

在matlab中是否有一个函数可以从索引向量生成邻接矩阵?

在matlab中是否有一个函数可以从索引向量生成邻接矩阵?,matlab,graph,adjacency-matrix,Matlab,Graph,Adjacency Matrix,我有一个向量集,如下所示: S = { [14, 2, 11, 10, 3, 8, 7, 1], [15, 4, 8, 7, 1], [16, 5, 4, 8, 7, 1] }; N = 20; A = zeros(N); for i=1:length(S) for j=1:length(S{i})-1 from = S{i}(j); to = S{i}(j+1); A(from, to) = 1; A(to, from)

我有一个向量集,如下所示:

S = { [14, 2, 11, 10, 3, 8, 7, 1], [15, 4, 8, 7, 1], [16, 5, 4, 8, 7, 1] };
N = 20;
A = zeros(N);
for i=1:length(S)
    for j=1:length(S{i})-1
        from = S{i}(j);
        to = S{i}(j+1);
        A(from, to) = 1;
        A(to, from) = 1;
    end
end
例如,S{1}表示(14,2)、(2,11)、(11,10)、(10,3)、(3,8)、(8,7)、(7,1)之间存在边

我想做一个基于S的邻接矩阵。我的代码如下:

S = { [14, 2, 11, 10, 3, 8, 7, 1], [15, 4, 8, 7, 1], [16, 5, 4, 8, 7, 1] };
N = 20;
A = zeros(N);
for i=1:length(S)
    for j=1:length(S{i})-1
        from = S{i}(j);
        to = S{i}(j+1);
        A(from, to) = 1;
        A(to, from) = 1;
    end
end
有没有像我的代码那样工作的函数?
我认为现有的代码比我的类似C代码的代码快得多。

我不熟悉一个函数,它不需要先构造一个图就可以创建一个邻接矩阵。如果您只是在寻找一个更快的实现,那么以下内容可能适合您。对于小问题,比如你发布的问题,它不会更快,但是对于大问题,它似乎要快4-5倍

A = zeros(N);
for idx=1:numel(S)
    s = S{idx};
    from = s(1:end-1);
    to = s(2:end);
    A(([to from]-1)*N+[from to]) = 1;
end
下面是我为测试目的创建的一个大示例问题

N = 1000;
S = cell(1,1000);
for idx = 1:numel(S)
    r = randperm(N);
    S{idx} = r;
end
使用MATLAB2017a的定时差:

Your method: 0.149983 seconds.
This method: 0.036491 seconds.

美好的谢谢你,我知道函数numel和end-1!!!!我总是在终止某些语句时使用“end”,例如if、for等。