Maison développement back-end Tutoriel Python Explication détaillée du module aléatoire de Python, de l'algorithme aléatoire pondéré et de la méthode d'implémentation

Explication détaillée du module aléatoire de Python, de l'algorithme aléatoire pondéré et de la méthode d'implémentation

Mar 24, 2017 pm 05:09 PM

aléatoire est utilisé pour générer des nombres aléatoires. Nous pouvons l'utiliser pour générer des nombres aléatoirement ou sélectionner des chaînes.
•random.seed(x) change la graine du générateur de nombres aléatoires .
Généralement, il n'est pas nécessaire de définir spécifiquement la graine, Python sélectionnera automatiquement la graine.
•random.random() est utilisé pour générer un nombre à virgule flottante aléatoire n,0 <= n < 1
•random.uniform(a,b) est utilisé pour générer un nombre à virgule flottante aléatoire dans une plage spécifiée, généré aléatoire entier a<=n<=b;
•random.randint(a,b) est utilisé pour générer un entier dans une plage spécifiée, a est la limite inférieure, b est la limite supérieure, l'entier aléatoire généré a<=n<=b; si a=b, alors n=a si a>b, erreur
•random.randrange([ start], stop [,step] ) Obtenez un nombre aléatoire à partir de l'ensemble dans la plage spécifiée [start, stop), augmentant de la base spécifiée. La valeur par défaut de la base est 1
•random.choice(sequence) Obtenir un élément aléatoire à partir de la séquence, représenté par le paramètre séquence. Un type ordonné, et non un type spécifique, fait généralement référence à une liste, un tuple, une chaîne, etc.
•random.shuffle(x[,random]) est utilisé pour perturber (mélanger) les éléments d'une liste qui modifieront la liste d'origine
•random.sample(sequence,k) Obtenez au hasard k éléments de la séquence spécifiée et renvoyez-les sous forme un fragment, sans changer la séquence d'origine
Maintenant que nous avons les connaissances de base, implémentons un algorithme aléatoire pondéré :
L'algorithme aléatoire pondéré est généralement utilisé dans les scénarios suivants : Il existe un ensemble S, qui contient quatre éléments, tels que A, B, C et D. À l'heure actuelle, nous voulons en tirer un élément au hasard, mais la probabilité de tirer est différente. Par exemple, nous espérons que la probabilité de tirer A est de 50 %, la probabilité de tirer B et C est de 20 % et la probabilité de tirer A est de 50 %. la probabilité de tirer D est de 10 %. D’une manière générale, on peut attribuer un poids à chaque élément, et la probabilité d’extraction est proportionnelle à ce poids. Ensuite, l'ensemble ci-dessus devient :
{A:5, B:2, C:2, D:1>
Méthode 1 :
La méthode la plus simple peut ressembler à ceci :
Développez la séquence en fonction de la valeur de poids dans : lists=[A,A,A,A,A,B,B,C,C,D], puis sélectionnez-en une au hasard avec random.choice(lists). Bien que la complexité temporelle de cette sélection soit O(1), la quantité de données est importante et la consommation d'espace est trop importante.

# coding:utf-8
import random
def weight_choice(list, weight):
  """
  :param list: 待选取序列
  :param weight: list对应的权重序列
  :return:选取的值
  """
  new_list = []
  for i, val in enumerate(list):
    new_list.extend(val * weight[i])
  return random.choice(new_list)
if name == "main":
  print(weight_choice(['A', 'B', 'C', 'D'], [5, 2, 2, 1]))
Copier après la connexion


Méthode 2 :
La méthode la plus courante est la suivante :
Calculez la somme des poids, puis sélectionnez au hasard un nombre compris entre 1 et la somme R, puis parcourez toute la collection et comptez la somme des poids des éléments parcourus. S'il est supérieur ou égal à R, arrêtez le parcours et sélectionnez les éléments rencontrés.
En utilisant l'ensemble ci-dessus comme exemple, la somme est égale à 10. Si le nombre aléatoire est compris entre 1 et 5, le parcours se terminera lorsque le premier nombre sera parcouru. cohérent avec la probabilité sélectionnée.
Lors de la sélection, vous devez parcourir la collection et sa complexité temporelle est O(n).

# coding:utf-8
import random
list = ['A', 'B', 'C', 'D']
def weight_choice(weight):
  """
  :param weight: list对应的权重序列
  :return:选取的值在原列表里的索引
  """
  t = random.randint(0, sum(weight) - 1)
  for i, val in enumerate(weight):
    t -= val
    if t < 0:
      return i
if name == "main":
  print(list[weight_choice([5, 2, 2, 1])])
Copier après la connexion


Méthode 3 :
Vous pouvez d'abord trier la séquence originale en fonction du poids. Lors du parcours de cette manière, les éléments présentant une forte probabilité peuvent être rencontrés rapidement, ce qui réduit le nombre d'éléments à parcourir. (Parce que rnd décrémente le plus rapidement (soustrayez d'abord le plus grand nombre))
Comparez {A:5, B:2, C:2, D:1} et {B:2, C:2, A: 5, D : 1}
L'espérance du nombre d'étapes de parcours pour le premier est 5/10*1+2/10*2+2/10*3+1/10*4=19/10 tandis que l'espérance pour le ce dernier est 2/10* 1+2/10*2+5/10*3+1/10*4=25/10.
Cela améliore la vitesse moyenne de sélection, mais le tri de la séquence originale prend également du temps.
Créez d'abord un préfixe et une séquence de valeurs de poids, puis après avoir généré un nombre aléatoire t, vous pouvez utiliser la méthode de dichotomie pour le trouver à partir de ce préfixe et de cette séquence. Ensuite, la complexité temporelle de la sélection est O(logn).

# coding:utf-8
import random
import bisect
list = ['A', 'B', 'C', 'D']
def weight_choice(weight):
  """
  :param weight: list对应的权重序列
  :return:选取的值在原列表里的索引
  """
  weight_sum = []
  sum = 0
  for a in weight:
    sum += a
    weight_sum.append(sum)
  t = random.randint(0, sum - 1)
  return bisect.bisect_right(weight_sum, t)
if name == "main":
  print(list[weight_choice([5, 2, 2, 1])])
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Mar 05, 2025 am 09:58 AM

Ce tutoriel montre comment utiliser Python pour traiter le concept statistique de la loi de Zipf et démontre l'efficacité de la lecture et du tri de Python de gros fichiers texte lors du traitement de la loi. Vous vous demandez peut-être ce que signifie le terme distribution ZIPF. Pour comprendre ce terme, nous devons d'abord définir la loi de Zipf. Ne vous inquiétez pas, je vais essayer de simplifier les instructions. La loi de Zipf La loi de Zipf signifie simplement: dans un grand corpus en langage naturel, les mots les plus fréquents apparaissent environ deux fois plus fréquemment que les deuxième mots fréquents, trois fois comme les troisième mots fréquents, quatre fois comme quatrième mots fréquents, etc. Regardons un exemple. Si vous regardez le corpus brun en anglais américain, vous remarquerez que le mot le plus fréquent est "th

Comment utiliser la belle soupe pour analyser HTML? Comment utiliser la belle soupe pour analyser HTML? Mar 10, 2025 pm 06:54 PM

Cet article explique comment utiliser la belle soupe, une bibliothèque Python, pour analyser HTML. Il détaille des méthodes courantes comme find (), find_all (), select () et get_text () pour l'extraction des données, la gestion de diverses structures et erreurs HTML et alternatives (Sel

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Mar 10, 2025 pm 06:52 PM

Cet article compare TensorFlow et Pytorch pour l'apprentissage en profondeur. Il détaille les étapes impliquées: préparation des données, construction de modèles, formation, évaluation et déploiement. Différences clés entre les cadres, en particulier en ce qui concerne le raisin informatique

Sérialisation et désérialisation des objets Python: partie 1 Sérialisation et désérialisation des objets Python: partie 1 Mar 08, 2025 am 09:39 AM

La sérialisation et la désérialisation des objets Python sont des aspects clés de tout programme non trivial. Si vous enregistrez quelque chose dans un fichier Python, vous effectuez une sérialisation d'objets et une désérialisation si vous lisez le fichier de configuration, ou si vous répondez à une demande HTTP. Dans un sens, la sérialisation et la désérialisation sont les choses les plus ennuyeuses du monde. Qui se soucie de tous ces formats et protocoles? Vous voulez persister ou diffuser des objets Python et les récupérer dans son intégralité plus tard. C'est un excellent moyen de voir le monde à un niveau conceptuel. Cependant, à un niveau pratique, le schéma de sérialisation, le format ou le protocole que vous choisissez peut déterminer la vitesse, la sécurité, le statut de liberté de maintenance et d'autres aspects du programme

Modules mathématiques en python: statistiques Modules mathématiques en python: statistiques Mar 09, 2025 am 11:40 AM

Le module statistique de Python fournit de puissantes capacités d'analyse statistique de données pour nous aider à comprendre rapidement les caractéristiques globales des données, telles que la biostatistique et l'analyse commerciale. Au lieu de regarder les points de données un par un, regardez simplement des statistiques telles que la moyenne ou la variance pour découvrir les tendances et les fonctionnalités des données d'origine qui peuvent être ignorées et comparer les grands ensembles de données plus facilement et efficacement. Ce tutoriel expliquera comment calculer la moyenne et mesurer le degré de dispersion de l'ensemble de données. Sauf indication contraire, toutes les fonctions de ce module prennent en charge le calcul de la fonction moyenne () au lieu de simplement additionner la moyenne. Les nombres de points flottants peuvent également être utilisés. Importer au hasard Statistiques d'importation de fracTI

Gestion des erreurs professionnelles avec Python Gestion des erreurs professionnelles avec Python Mar 04, 2025 am 10:58 AM

Dans ce tutoriel, vous apprendrez à gérer les conditions d'erreur dans Python d'un point de vue système entier. La gestion des erreurs est un aspect critique de la conception, et il traverse les niveaux les plus bas (parfois le matériel) jusqu'aux utilisateurs finaux. Si y

Quelles sont les bibliothèques Python populaires et leurs utilisations? Quelles sont les bibliothèques Python populaires et leurs utilisations? Mar 21, 2025 pm 06:46 PM

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

Stracage des pages Web en Python avec une belle soupe: recherche et modification DOM Stracage des pages Web en Python avec une belle soupe: recherche et modification DOM Mar 08, 2025 am 10:36 AM

Ce tutoriel s'appuie sur l'introduction précédente à la belle soupe, en se concentrant sur la manipulation de Dom au-delà de la simple navigation sur les arbres. Nous explorerons des méthodes et techniques de recherche efficaces pour modifier la structure HTML. Une méthode de recherche DOM commune est ex

See all articles