numbers in random positions on a zero matrix
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Doobie
el 5 de Mayo de 2017
Editada: Andrei Bobrov
el 5 de Mayo de 2017
I want to generate a random matrix (let's say a 5x4 matrix) with the following properties:
- There must be one 3, two 2s, nine 1s, eight 0s in the matrix.
- In each row, there is at most one 3 or 2 and at most two 1s.
- In each row, if there is a 3, then there is no 2.
- In each row, if there is a 3, then there is one 1.
- In each row, if there is a 2, then there are two 1s.
An example matrix:
0 0 1 1
3 1 0 0
2 1 1 0
0 1 1 2
0 1 1 0
How do I generate such a matrix? I don't even know where to begin. Any help is greatly appreciated.
0 comentarios
Respuesta aceptada
Andrei Bobrov
el 5 de Mayo de 2017
Editada: Andrei Bobrov
el 5 de Mayo de 2017
m = 5;
n = 4;
T = [2 2 3 ones(1,9) zeros(1,8)];
out = reshape(T,m,[]);
[~,ii] = sort(rand([m,n]),2);
out = out(sub2ind([m,n],repmat((1:m)',1,n),ii));
out = out(randperm(m),:);
0 comentarios
Más respuestas (1)
Santhana Raj
el 5 de Mayo de 2017
Start with the function randi(4). it generates random integers. It doesnt give 0, so you can generate with a max of 4 and subtract 1 with the result.
Now with whatever number generated, check your 4 conditions. If they are all valid. place it in its position in the matrix. Repeat it for any size of matrix you want!!
1 comentario
Guillaume
el 5 de Mayo de 2017
randi will generate numbers in whichever range you want as long as you ask it to. To get number between 0 and 3:
randi([0 3])
No need to do some gymnastics.
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!