Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 - Fatal编程技术网

Matlab 如何用零随机替换非零元素?

Matlab 如何用零随机替换非零元素?,matlab,Matlab,我有一个矩阵,包括1和0元素,如下所示,用作网络邻接矩阵 A = 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 我想模拟对网络的攻击,因此我必须用0随机替换1元素的特定百分比。如何在MATLAB中实现这一点 我知道如何用零随机替换一定百分比的元素,但我必须确保随机替换的元素是矩阵的1元素之一,而不是零。函数find是您的朋友: indices =

我有一个矩阵,包括
1
0
元素,如下所示,用作网络邻接矩阵

A =

    0     1     1     1
    1     1     0     1
    1     1     0     1
    1     1     1     0
我想模拟对网络的攻击,因此我必须用
0
随机替换
1
元素的特定百分比。如何在MATLAB中实现这一点


我知道如何用零随机替换一定百分比的元素,但我必须确保随机替换的元素是矩阵的
1
元素之一,而不是零。

函数find是您的朋友:

indices = find(A);
这将返回矩阵A中1个元素的索引数组,您可以使用此数组子集上的元素百分比替换为零的方法。那么

A(subsetIndices) = 0;

将A的剩余索引替换为零。

如果要以一定的概率更改每个
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

请注意,在这种情况下,结果分数可能与预期分数不同,因为需要将条目四舍五入为整数。

@horchler's point是一个很好的分数。但是,如果我们保持简单,那么您可以将输入矩阵乘以掩码矩阵

>> a1=randint(5,5,[0 1]) #before replacing 1->0

a1 =

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

>> a2=random('unif',0,1,5,5) #Assuming frequency distribution is uniform ('unif')

a2 =

    0.7889    0.3200    0.2679    0.8392    0.6299
    0.4387    0.9601    0.4399    0.6288    0.3705
    0.4983    0.7266    0.9334    0.1338    0.5751
    0.2140    0.4120    0.6833    0.2071    0.4514
    0.6435    0.7446    0.2126    0.6072    0.0439

>> a1.*(a2>0.1) #And the replacement prob. is 0.1

ans =

     1     1     1     0     1
     0     1     1     1     0
     0     1     0     0     1
     0     0     1     0     1
     1     0     1     0     0
和其他技巧可以添加到掩模矩阵(a2)。例如不同的频率分布或结构(例如,一旦更换一个单元,相邻单元更换的可能性就会降低,等等)
干杯。

您是否希望1个元素被替换的概率为
百分比
/100,而与另一个元素是否被替换无关。或者你想随机替换
百分比
1个元素?@horchler嘿,这是个好主意
>> a1=randint(5,5,[0 1]) #before replacing 1->0

a1 =

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

>> a2=random('unif',0,1,5,5) #Assuming frequency distribution is uniform ('unif')

a2 =

    0.7889    0.3200    0.2679    0.8392    0.6299
    0.4387    0.9601    0.4399    0.6288    0.3705
    0.4983    0.7266    0.9334    0.1338    0.5751
    0.2140    0.4120    0.6833    0.2071    0.4514
    0.6435    0.7446    0.2126    0.6072    0.0439

>> a1.*(a2>0.1) #And the replacement prob. is 0.1

ans =

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