2017-10-13 13 views
1

EDIT: Je dois aussi avoir la somme de chaque colonne pour égaler un nombre spécifique !!Générer une matrice binaire avec un nombre spécifique d'éléments dans la rangée

Je souhaite générer une matrice NxN binaire telle que chaque ligne contienne un nombre spécifique de 1 sans répétition de lignes. Exemple: Générer matrice 4x4 avec 2 unités de chaque rangée et avec la somme de la valeur de la colonne est égal à 2, qui est, de générer

enter image description here

Ainsi, chaque ligne est unique et a exactement deux uns et la somme de chaque colonne est 2. Une mauvaise réponse serait:

B = 

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

parce que la somme de la colonne 1 ne correspond pas à 2 (mais 3) et la somme de la colonne 4 ne correspond pas à 2 (mais 1). Chaque colonne devrait ajouter jusqu'à 2. Comment puis-je obtenir la bonne réponse dans matlab?

+0

tout commentaire comme ce n'est pas ma réponse : [Roger Stafford] (https://de.mathworks.com/matlabcentral/answers/76363-changing-position-of-numbers-in-a-vector) montre un moyen très efficace d'obtenir toutes les permutations possibles. Même pour des longueurs> 10. 'x = [1 1 0 0]; n = taille (x, 2); k = somme (x == 1); C = nchoosek (1: n, k); m = taille (C, 1); B = zéros (m, n); B (repmat ((1-m: 0) ', 1, k) + m * C) = 1 ' – Irreducible

+0

pouvez-vous expliquer votre montage avec un exemple? – Irreducible

+0

Oui, c'est fait. J'ai ajouté un mauvais exemple. –

Répondre