2

ネットワーク隣接マトリックスとして使用される以下のような要素を含むマトリックスが1あります。0

A =

    0     1     1     1
    1     1     0     1
    1     1     0     1
    1     1     1     0

ネットワークへの攻撃をシミュレートしたいので、特定の割合の1要素をランダムに0. MATLAB でこれを行うにはどうすればよいですか?

要素の割合をランダムにゼロに置き換える方法は知っていますが、ランダムに置き換えられる1要素がゼロではなく行列の要素の 1 つであることを確認する必要があります。

4

3 に答える 3

5

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

エントリの固定部分をランダムに変更する場合: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;

この場合、整数のエントリ数に丸める必要があるため、結果の分数は意図したものとは異なる場合があることに注意してください。

于 2013-08-16T16:43:58.590 に答える
0

関数 find はあなたの友達です:

indices = find(A);

これにより、行列 A の 1 要素のインデックスの配列が返され、この配列のサブセットで要素のパーセントをゼロに置き換える方法を使用できます。それで、

A(subsetIndices) = 0;

A の残りのインデックスをゼロに置き換えます。

于 2013-08-16T16:38:11.390 に答える