0

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

4

2 回答 2

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);
于 2013-08-16T23:12:34.977 回答
0

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

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

使用此矩阵来索引替换

于 2013-08-17T00:28:00.453 回答