Symmetric binary matrix with diagonal 0 values
2 views (last 30 days)
Show older comments
I want to create a symmetric (10x10) binary matrix with n number of ones and the diagonal values have to be 0s. Can anyone help me?
1 Comment
James Tursa
on 21 Oct 2019
1's can be located anywhere, just not on the diagonal? Random locations? I am assuming n must be even?
Accepted Answer
Guillaume
on 21 Oct 2019
Guaranteed to work on the first try:
Msize = 10; %size of square matrix
N = 20; %number of ones on each side of the diagonale
M = zeros(Msize);
indices = nonzeros(tril(reshape(1:Msize^2, Msize, Msize), -1)); %get indices BELOW diagonale
M(indices(randperm(numel(indices), N))) = 1; %pick N indices and fill with 1
M = M | M.' %do the symmetry
3 Comments
More Answers (1)
KALYAN ACHARJYA
on 21 Oct 2019
Edited: KALYAN ACHARJYA
on 21 Oct 2019
Beware: Before Try (I posted it as answer, so that you may get some idea)
n=input('Eneter the value of n: ')
result=zeros(10,10);
while sum(result)~=n
result=ones(10,10)-diag(diag(ones(10,10))) & randi([0 1],[10 10]);
end
result
When it will works, depending on luck, as I have no idea how to control number on 1 generation in random matrics, but I have forced all diagonal elements to zeros.
During running the Matlab (Execution), you can stop it by pression Ctrl+S
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!