Comment créer grand tableau en python, comment créer efficacetableau binaire en python
en C/C++:
byte *data = (byte*)memalloc(10000);
ou
byte *data = new byte[10000];
en python ...?
Comment créer grand tableau en python, comment créer efficacetableau binaire en python
en C/C++:
byte *data = (byte*)memalloc(10000);
ou
byte *data = new byte[10000];
en python ...?
En règle générale avec python, vous souhaitez simplement créer une liste
mylist = []
et l'utiliser comme un tableau. Alternativement, je pense que vous pourriez être à la recherche du module de tableau. Voir http://docs.python.org/library/array.html.
Jetez un oeil à la array module:
import array
array.array('B', [0] * 10000)
Au lieu de passer une liste pour l'initialiser, vous pouvez passer un générateur, ce qui est plus efficace mémoire.
Vous pouvez pré-allouer une liste:
l = [0] * 10000
qui sera légèrement plus rapide que .appending à lui (car il évite les réaffectations intermédiaires). Toutefois, cela allouera généralement de l'espace pour une liste de pointeurs vers des objets entiers, qui seront plus grands qu'un tableau d'octets dans C.
Si vous avez besoin de l'efficacité de la mémoire, vous pouvez utiliser un objet tableau. à savoir:
import array, itertools
a = array.array('b', itertools.repeat(0, 10000))
Notez que ceux-ci peuvent être un peu plus lent à utiliser dans la pratique, car il y a un processus unboxing lors de l'accès des éléments (ils doivent d'abord être convertis en un objet python int
).
'B' doit être utilisé (pour unsigned char) pas 'b', car le premier est le seul que C garantit est un type cela a tous les bits qui contribuent à sa valeur. – Garen
Vous pouvez créer efficacement grand tableau avec réseau de modules, mais l'utiliser ne sera pas aussi vite que C. Si vous avez l'intention de faire des maths, vous seriez mieux avec numpy.array
Vérifiez this question pour comparaison.
L'initialisation de la baie la plus rapide est ** 'array.array ('B', [0]) * 10000' **. (c'est-à-dire mupliplied short array) voir http://stackoverflow.com/a/3214343/448474 – hynekcer