Symmetric binary matrix with diagonal 0 values

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 件のコメント

James Tursa
James Tursa 2019 年 10 月 21 日
1's can be located anywhere, just not on the diagonal? Random locations? I am assuming n must be even?

サインインしてコメントする。

 採用された回答

Guillaume
Guillaume 2019 年 10 月 21 日

0 投票

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 件のコメント

Dina Tarek
Dina Tarek 2019 年 10 月 22 日
Thanks it worked, I almost lost hope to make it
Dina Tarek
Dina Tarek 2019 年 11 月 25 日
Error using randperm
Inputs must be nonnegative scalar integers.
The above message appeared when I tried diffrent Msize
for example Msize = 12 or 13 or 9 ;
do you know how to solve this error
Guillaume
Guillaume 2019 年 11 月 25 日
Your N is either non-integer, non-positive, or non-scalar.

サインインしてコメントする。

その他の回答 (1 件)

KALYAN ACHARJYA
KALYAN ACHARJYA 2019 年 10 月 21 日
編集済み: KALYAN ACHARJYA 2019 年 10 月 21 日

0 投票

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

カテゴリ

ヘルプ センター および File ExchangeOperating on Diagonal Matrices についてさらに検索

質問済み:

2019 年 10 月 21 日

コメント済み:

2019 年 11 月 25 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by