Matlab 如何创建对称零和一矩阵

Matlab 如何创建对称零和一矩阵,matlab,matrix,Matlab,Matrix,我需要创建一个100*100对称矩阵,该矩阵具有0和1的随机分布,但对角线应为全零,我如何才能做到这一点?这是一种方法: N = 100; % size of square matrix p = 0.5; % probability of 0s A = triu(rand(N)>p, 1); % matrix of 0s and 1s (upper triangular part) A = A + A'; % now it is symmetric 您可以使用均匀分布生成随机数: n =

我需要创建一个100*100对称矩阵,该矩阵具有0和1的随机分布,但对角线应为全零,我如何才能做到这一点?

这是一种方法:

N = 100; % size of square matrix
p = 0.5; % probability of 0s
A = triu(rand(N)>p, 1); % matrix of 0s and 1s (upper triangular part)
A = A + A'; % now it is symmetric

您可以使用均匀分布生成随机数:

n = 100;
a = round(rand(n,n));
现在将对角线条目设置为零():

对称分量:

aSym = floor((a + a')/2);
n=5的示例:

aSym =

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

编辑:根据randomatlabuser的建议,在计算矩阵的对称分量时添加了行,并消除了将对角线上的条目归零的循环

注意,当前版本返回的矩阵是不对称的。此外,可以避免循环:
a(1:(n+1):end)=0
@randomatlabuser,是的,谢谢你在这方面的说明,我忘记了对称性要求。我编辑了我的答案以包含该内容。@roybatty,谢谢,如果您愿意,您也可以删除答案中的循环。@randomatlabuser,谢谢您对循环的建议(请参阅编辑),继续努力!
aSym =

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