我在测试Barabassi albert scale free graph时遇到了一些问题
我想随机删除节点,看看这个模型对删除节点有多强大(randomely)?
我有邻接矩阵adj
。如何在matlab中随机删除节点?
答案 0 :(得分:4)
Ander's answer非常好,但我有一些保留
randi
可以多次返回相同的索引。例如
>> randi(10,1,5)
ans =
6 3 10 6 2
两次返回6
。因此,它可能会比矩阵中的n
元素减少更少。
因此,我的解决方案是使用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)=[];