Dis que je voulais créer une matrice (pas la liste) de 1 000 000 twos à Python, comme ceci: p>
Quel serait un moyen rapide mais simple de le faire? P> array = [2, 2, 2, ......, 2] code> p>
6 Réponses :
Est-ce ce que vous êtes après?
twosList = [2] * 1000000
anArray =array.array('i', (2 for i in range(0,1000000)))
Utilisation du TIMEIT Module Vous pouvez attribuer ce que les le plus rapide em> de faire c'est: Tout d'abord, mettez que de nombreux chiffres dans une liste tueront votre machine le plus probablement comme il le stocke en mémoire. P> Cependant, vous pouvez tester le exécution en utilisant quelque chose comme tellement. Il a couru sur mon ordinateur pendant longtemps avant que je viens d'abandonner, mais je suis sur un plus ancien PC: p> ther autre option que vous pouvez examiner consiste à utiliser le Array module comme indiqué, Des réseaux efficaces de valeurs numériques code> P>
a = 2 * ones(10000000)
NUMPY a également dédié des fonctions d'usine: A = 2 * (1000000) code>
@Philipp: C'est génial! C'est pourquoi j'aime tellement. La curiosité pour répondre à une question conduit à de nombreuses apprentissages pour moi-même. Acclamations :-)
Si vous ne pouvez pas installer une liste de million d'éléments ou une matrice dans la mémoire de votre machine, elle est déjà morte. En outre, je ne comprends pas "il a couru sur mon ordinateur pendant une longue période" ... Voir ma réponse pour (a) Comment faire du synchronisation simple en utilisant Timeiit code> à l'invite de commande (B) Comment Les petits temps mesurés (millisecondes!) sont (Ordinateur portable de 4 ans en cours d'exécution Win XP SP2)
La réponse actuellement acceptée n'est pas le moyen le plus rapide d'utiliser array.array code>; Au moins, ce n'est pas le plus lent - Comparez-les:
[source: johncatfish (quoting chauncey), Bartek]
python -m timeit -s"import array" "arr = array.array('i', (2 for i in range(0,1000000)))"
10 loops, best of 3: 543 msec per loop
[source: g.d.d.c]
python -m timeit -s"import array" "arr = array.array('i', [2] * 1000000)"
10 loops, best of 3: 141 msec per loop
python -m timeit -s"import array" "arr = array.array('i', [2]) * 1000000"
100 loops, best of 3: 15.7 msec per loop
+1 Et j'ai mis à jour ma réponse avec l'autre syntaxe et un commentaire. Je vous remercie de le faire remarquer.
slooow :) ... hybride de ces deux version est meilleur
Une approche hybride fonctionne le plus rapide pour moi
Si la valeur initiale ne doit pas nécessairement être non nulle et si vous avez / dev / zéro disponible sur votre plate-forme, les éléments suivants sont environ 4,7 fois plus rapides que la matrice ('L', [0]) * Taille Solution: en question Comment initialiser un objet de tableau entier.Array avec des zéros à Python Je cherche une meilleure façon. p> p>
Je ne connais pratiquement pas de python, mais pourrait-il être quelque chose comme
array = [2 pour x en 1..100000000] code>?
Cette question précédente pourrait aider - Stackoverflow.com/Questtions/1859864/...
@myers: votre suggestion n'est pas une syntaxe valide; Vous voulez éventuellement dire
[2 pour x en xrange (1000000)] code>;
[2] * 1000000 code> serait plus rapide et plus simple; Cependant, celles-ci produisent une liste code> - - code> tableau code> et
Liste code> signifie différentes choses dans Python.
@John: MMYers avait dit qu'il ne connaît pas pratiquement python. Alors arrêtez de nitpicking :) ecouteux appréciez les suggestions.
@Vijay dev: Veuillez arrêter de confondre "éduquer" et "Nitpicking". Si @mmyers devait poser une question, je serais heureux de fournir des références à des manuels et des tutoriels. Qui apprécie quelles suggestions ??
@John: merci. J'ai pensé que je pouvais m'améliorer en publiant ce que je penserais et que les gens me corrigent. (Maintenant, je me demande où j'ai eu le
1..1000000 code> de. Probablement ruby.)
Dupliqué possible de Initialisation numpy de matrice (remplir avec des valeurs identiques)