Deux principes à optimiser
Bonjour,
Je cherche à rendre plus rapide deux trucs.
Premièrement, j'aimerais pouvoir générer aussi rapidement que possible un nombre aléatoire X entier de 1 à M excluant N.
Présentement, je le fais ainsi :
Code:
1 2
| choix = [1:N-1,N+1:M];
X = choix(ceil(rand()*(M-1))); |
Sauriez-vous faire plus rapide ? Cela prend 4e-6 secondes sur ma machine.
Deuxièmement, un autre cas un peu plus important. J'ai des N valeurs et je leur attribue une probabilité d'être choisie à l'aide de la relation N_i / sum(N_i). J'aimerais choisir à nouveau N valeurs, mais cette fois selon les probabilités. Donc, une valeur pourrait ne pas être choisie et une autre pourrait être choisie plusieurs fois, selon sa probabilité, en autant que la longueur finale des valeurs choisies est N.
Exemple :
La somme est 30, les probabilités sont :
Code:
[1/30, 1/3, 1/10, 1/30, 1/2]
Le vecteur résultant pourrait être :
Code:
[15, 10, 15, 10, 15]
Merci.
PS : Je posterai mon algorithme pour ce cas prochainement. Dans mon algorithme, c'est mon utilisation de repmat qui pose problème.