2010-04-20 22 views
7

Czy istnieje sposób utworzenia obiektu z dowolnej klasy wewnątrz tablicy numpy ?. Coś jak:Tablica obiektów z numpy

a = zeros(4) 

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

Dzięki

Odpowiedz

11

Tak, można to zrobić:

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

Tutaj a.dtype jest dtype('object').

Ewentualnie, jeśli naprawdę trzeba zarezerwować pamięć dla tablicy i następnie zbudować element po elemencie, można zrobić:

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

@Mike: dziękuję za zauważenie literówki w pierwszym rozwiązaniu; Chodzi mi o to, co oczywiście włożyłeś w swoje rozwiązanie. Zapomniałem najpierw zbudować listę; teraz jest poprawiony. Dla drugiego rozwiązania przełączyłem się na numpy.empty. – EOL

5

Pozycje w numpy tablice są statycznie wpisane, a podczas rozmowy zeros cię utworzyć tablicę wskaźników. Aby zapisać dowolne obiekty, należy użyć kodu podobnego

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

co sprawia tablicę z dtype=object, który można również określić ręcznie.

Zastanów się, czy naprawdę chcesz numpy w tym przypadku. Nie wiem, jak bliski jest ten przykład dla twojego przypadku użycia, ale często zbiór obiektów typu dtype, szczególnie jednowymiarowy, działałby co najmniej tak dobrze, jak lista.