2010-04-20 5 views
7

Y at-il un moyen de créer un objet de n'importe quelle classe à l'intérieur d'un tableau numpy ?. Quelque chose comme:Tableau d'objets avec numpy

a = zeros(4) 

for i in range(4): 
    a[i]=Register() 

Merci

Répondre

11

Oui, vous pouvez le faire:

a = numpy.array([Register() for _ in range(4)]) 

Ici, a.dtype est dtype('object').

Alternativement, si vous avez vraiment besoin de réserver de la mémoire pour votre tableau et ensuite construire élément par élément, vous pouvez faire:

a = numpy.empty(shape=(4,), dtype=object) 
a[0] = Register() # etc. 
+0

@Mike: merci de repérer la faute de frappe dans la première solution; ce que je voulais dire était bien sûr ce que vous avez mis dans votre solution. J'avais oublié de construire la liste en premier; c'est maintenant corrigé. Pour la deuxième solution, je suis passé à numpy.empty. – EOL

5

Les éléments de tableaux numpy sont statiquement typés, et lorsque vous appelez zeros vous faire un tableau de flottants. Pour stocker des objets Python arbitraires, utilisez le code comme

numpy.array([Register() for i in xrange(4)]) 

qui fait un tableau avec dtype=object, que vous pouvez également spécifier manuellement.

Déterminez si vous voulez vraiment numpy dans ce cas. Je ne sais pas à quel point cet exemple est proche de votre cas d'utilisation, mais souvent un tableau numérique d'objets dtype, en particulier un objet unidimensionnel, fonctionnerait au moins aussi bien qu'une liste.