我有一个矩阵包括1
和0
下面的元素,用作网络邻接矩阵.
A =
0 1 1 1
1 1 0 1
1 1 0 1
1 1 1 0
Run Code Online (Sandbox Code Playgroud)
我想模拟对网络的攻击,所以我必须1
随机替换一些特定百分比的元素0
.我怎样才能在MATLAB中做到这一点?
我知道如何用零随机替换一定百分比的元素,但我必须确保随机替换的1
元素是矩阵元素之一而不是零.
如果您想以1
一定的概率更改每个:
p = 0.1%; % desired probability of change
A_ones = find(A); % linear index of ones in A
A_ones_change = A_ones(rand(size(A_ones))<=p); % entries to be changed
A(A_ones_change) = 0; % apply changes in those entries
Run Code Online (Sandbox Code Playgroud)
如果您想随机更改条目的固定部分1
:
f = 0.1; % desired fraction
A_ones = find(A);
n = round(f*length(A_ones));
A_ones_change = randsample(A_ones,n);
A(A_ones_change) = 0;
Run Code Online (Sandbox Code Playgroud)
注意,在这种情况下,得到的分数可能与预期的不同,因为需要舍入到整数个条目.