Création liste taille n, ss-liste taille N
Bonjour à tous,
j'aimerais créer une fonction $f(n,N)$ qui crée une liste L composée de n sous-listes de taille N, dont chaque coefficient est un nombre aléatoire (0 ou 1). Ensuite, il faudrait un compteur qui augmente de 1 dès qu'il y a au moins un 1 dans chacune des sous-listes.
si j'écris
Bonne fin de journée.
j'aimerais créer une fonction $f(n,N)$ qui crée une liste L composée de n sous-listes de taille N, dont chaque coefficient est un nombre aléatoire (0 ou 1). Ensuite, il faudrait un compteur qui augmente de 1 dès qu'il y a au moins un 1 dans chacune des sous-listes.
si j'écris
def f(n,N): liste=[] for i in range (n): liste.append([random.randint(0,1)]*N) return listej'obtiens que chaque membre de chaque sous liste est composé du même nombre aléatoire (0 ou 1), or je voudrais quelque chose du type (pour N=3) [[1,0,0],[0,1,1],[0,0,0],[0,1,0]...]
Bonne fin de journée.
Réponses
-
Il suffit de remplacer la ligne
liste.append([random.randint(0,1)]*N)
parliste.append([random.randint(0,1) for i in range(N)])
sinon, comme tu l'as remarqué, c'est la même instanciation derandom.randint(0,1)
qui est copiée dans chacune des cases de la liste.
En fait, en utilisant la compréhension de liste, tu peux même faire toute la fonction $f$ en une seule ligne :def f(n, N): return [[random.randint(0,1) for i in range(N)] for j in range(n)]
Quant à ton compteur, je te laisse le faire, mais ce n'est pas très difficile. -
Personnellement j'ai une violente réaction épidermique quand je vois un "append" dans un programme ; j'aurais utilisé la chose suivante :
n,N = (50, 10) Mat = np.random.randint(2, size=(n,N)) List = np.ndarray.tolist(Mat)
Peut-être ai-je mal compris -
désolé pour votre allergie je fais avec mon niveau en Python (qui n'est donc pas très très élevé)
-
"append" c'est de l'allocation dynamique de mémoire, et ça coûte très cher; à n'utiliser qu'en dernier recours.
A minima, la bonne méthode consiste:- soit à initialiser ta matrice et ensuite remplir les "cases"
- soit à utiliser un module ou une bibliothèque qui le fait directement pour toi (c'est le cas de numpy dans le cas présent)
Je te laisse tester avec n=100_000 par exemple et tu verras la différence -
paul18 : Il faut savoir nuancer. En premier lieu, il vaut mieux savoir faire quelque chose qui marche, et ensuite chercher à l'améliorer, voire changer de méthode, si ce n'est pas assez performant.
Ceci étant, puisque dans le cas présent il y a une fonction toute faite dans numpy... -
L'initialisation (variables, tableaux, matrices...) fait partie des des b-a-ba.
Pour numpy, c'est juste un partage d'information.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.2K Toutes les catégories
- 9 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 65 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 314 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 773 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres