Change index of element in matrix with constraint

2 views (last 30 days)
Hi all!
i have i binary matrix A(180,60), in each column i have 3 "ones" and only "one" by row,the sum of each row equal to 1.
i used this , but i had 3 "ones" in the 3 successive rows. How can i change the index of "1"?
M = 180; N =60;
k = 3;
C = repelem(eye(N), k, 1);
NEED URGENT HELP !

Answers (1)

Chunru
Chunru on 22 Aug 2022
A = repmat(eye(6), 3, 1) % change 6 to 60
A = 18×6
1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0
% if you need random permutation
B = A(randperm(6*3), :)
B = 18×6
0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0
  7 Comments
Chunru
Chunru on 22 Aug 2022
I could not understand your requirements:
"i need 3 'ones' in the 3 successive rows but with different position. as condition , after the 3 rows , the rest os first column will be "zero", after the next 3 rows , the rest of second column "zero",..."
insaf rzig
insaf rzig on 22 Aug 2022
i will try to explain by using independent matrix :
A [3,6]
1 0 0 0 0 0
1 0 0 0 0 0
0 1 0 0 0 0
B[3,7]
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
C[3,8]
0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
D[3,9]
0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
until i get [3,60]. but all this will be in the same matrix [180,60]

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!