2009-04-15 6 views
4

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 ...?

Répondre

0

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.

7

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.

+0

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

6

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).

+0

'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

0

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.

Questions connexes