如何用零随机对称地替换一些元素?

时间:2013-08-16 22:02:42

标签: matlab matrix

存在包含1和0个元素的对称矩阵A,正如我们在这样的矩阵中所知,我们有A(i,j)= A(j,i)。我想在matlab中以0对称的方式随机替换1个元素的精确分数。我的意思是如果随机选择元素A(i,j)替换为0,则元素A(j,i)将被同时替换为0。那么有什么方法可以在matlab中做这样的事情吗?

2 个答案:

答案 0 :(得分:0)

假设它是一个mxn矩阵(m = n)并且你想要替换k个元素,你可以这样做:

%Find the indeces for the elements equal to 1
[onesX, onesY] = find(A == 1);
numOnesX = size(onesX,1);
numOnesY = size(onesY,1); % numOnesX and numOnesY should be the same

%Generate a random set of elements to be replaced
xRep = randperm(numOnesX);
xRep = onesX(xRep(1:k));
yRep = randperm(numOnesY);
yRep = onesY(yRep(1:k));

%Do the replacement
A(xRep, yRep) = ~A(xRep, yRep);
A(yRep, xRep) = ~A(yRep, xRep);

答案 1 :(得分:0)

如果adj是包含1和0的矩阵,则创建对称矩阵:

adj = adj + adj';
adj(adj>1)=1; 

使用此矩阵索引替换