在matlab中的邻接矩阵中随机删除节点

时间:2014-10-28 10:48:28

标签: matlab graph

我在测试Barabassi albert scale free graph时遇到了一些问题 我想随机删除节点,看看这个模型对删除节点有多强大(randomely)? 我有邻接矩阵adj。如何在matlab中随机删除节点?

2 个答案:

答案 0 :(得分:4)

Ander's answer非常好,但我有一些保留

  1. randi可以多次返回相同的索引。例如

    >> randi(10,1,5)
    ans =
    6     3    10     6     2
    

    两次返回6。因此,它可能会比矩阵中的n元素减少更少

  2. 选择哪些元素应该留在矩阵中比构造一个完整的矩阵并从中丢弃元素更有效:你实际上在每个命令中复制矩阵的大部分。
  3. 因此,我的解决方案是使用randsample

    N = size(adj,1); %// current number of nodes
    toKeep = N - n; %// n is number to remove
    idx = randsample( N, toKeep ); %// sample WITHOUT replacement
    newadj = adj( idx, idx ); %// copy only the relevant elements
    

答案 1 :(得分:2)

编辑: @Shai's answer比我好,并显示我的错误。这是真正的好答案。

如果我没有错:并且邻接矩阵是Npoints X Npoints矩阵,每个节点显示与节点相邻的节点。

我想如果你想删除随机点,你需要删除该点的行和列。

% n is number of points that you want to delete
% adj is the adjacency matrix
idx=randi(size(adj,1),n)
newadj=adj;
newadj(idx,:)=[];
newadj(:,idx)=[];