12
votes

Générer un nombre aléatoire entre 1 et 10 à l'exception d'un numéro unique dans Matlab

Je voudrais générer un nombre aléatoire entre 1 et 10 en utilisant par exemple randi ([1,10]) mais je voudrais exclure un nombre unique, par exemple 7 - Ce nombre serait toujours Modifier et être spécifié dans une variable appelée B .

est-ce possible de faire en quelque sorte?


3 commentaires

Juste boucle sur le randi ([1,10]) jusqu'à ce que le résultat ne soit pas égal B .


Oui, mais cela se produirait dans un programme et je ne suis pas là pour superviser cela. Je cherche un argument qui omet b.


@ user1723765 La boucle et les tests peuvent être automatisés.


3 Réponses :


18
votes

Utilisez randsample code> . Par exemple, pour générer un nombre compris entre 1 et 10, excluant 7, procédez comme suit: xxx pré>

ici Sediff code> est utilisé pour exclure la valeur de B code> à partir du vecteur 1:10 code>. p>

Si vous n'avez pas la boîte à outils Statistiques installée, vous ne pourrez pas utiliser randsample code>, alors utilisez RAND CODE> : P>

v = setdiff(1:10, b);
x = v(ceil(numel(v) * rand));


3 commentaires

Pour la deuxième solution, on peut utiliser x = v (randi (numel (V)));


@Mohsennosratinia Oui, tu as raison. Mais gardez également à l'esprit qu'il n'y a pas de randi dans les anciennes versions de Matlab.


Eh bien, Randi est apparu dans R2008B et je pense que le nombre de personnes qui n'ont pas de statistiques boîtes à outils sont bien plus grandes que les personnes qui l'ont sur une version de plus de 5 ans.



5
votes

pour ceux sans la boîte à outils statistiques:

pop(randi(numel(pop), 1, n))


2 commentaires

Randperm est correct si vous ne voulez pas répéter les répétitions.


@glglgl, ce n'est pas vraiment nécessaire pour la question mais je l'ai changé à numel (pop) à la place, la population peut même être une grille de nombres si désiré.



1
votes

AS @ittant mentionné, vous pouvez utiliser randsample code> pour le faire, mais je pense que cela de le faire de manière plus simple devrait faire pour vous:

v = [1:b-1,b+1:10];
x = v(ceil(numel(v) * rand));


1 commentaires

Et si b = 1 ou b = 10?