6
votes

Quel est le moyen le plus rapide d'initialiser un tableau entier dans Python?

Dis que je voulais créer une matrice (pas la liste) de 1 000 000 twos à Python, comme ceci:

array = [2, 2, 2, ......, 2]

Quel serait un moyen rapide mais simple de le faire?


7 commentaires

Je ne connais pratiquement pas de python, mais pourrait-il être quelque chose comme array = [2 pour x en 1..100000000] ?


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)] ; [2] * 1000000 serait plus rapide et plus simple; Cependant, celles-ci produisent une liste - - tableau et Liste 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 de. Probablement ruby.)


Dupliqué possible de Initialisation numpy de matrice (remplir avec des valeurs identiques)


6 Réponses :


8
votes

Est-ce ce que vous êtes après?

twosList = [2] * 1000000


0 commentaires

1
votes
anArray =array.array('i', (2 for i in range(0,1000000)))

0 commentaires

3
votes

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> xxx pré>

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)


3 commentaires

NUMPY a également dédié des fonctions d'usine: A = 2 * (1000000)


@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 à 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)



16
votes

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


2 commentaires

+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



5
votes

Une approche hybride fonctionne le plus rapide pour moi xxx


xxx

0 commentaires

1
votes

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: xxx

en question Comment initialiser un objet de tableau entier.Array avec des zéros à Python Je cherche une meilleure façon.


0 commentaires