2009-10-21 7 views
6

Czy istnieje prosty sposób dodania rekordu/wiersza do numpy recarray bez tworzenia nowego recarray? Powiedzmy, że mam recarray, który ma 1 Gb w pamięci, chcę móc dodać wiersz do niego bez pytona zajmują 2 Gb pamięci tymczasowo.Dodawanie wiersza do numpy recarray

Odpowiedz

10

Możesz zadzwonić pod numer yourrecarray.resize z kształtem, który ma jeszcze jeden wiersz, a następnie przypisać do tego nowego wiersza. Oczywiście. numpypotęga nadal trzeba przeznaczyć całkowicie nową pamięć, czy to po prostu nie ma miejsca na rozbudowę tablicę w miejscu, ale przynajmniej masz szansę! -)

Od przykładem zażądano, tutaj przychodzi, zmodyfikowane z canonical example list ...:

>>> import numpy 
>>> mydescriptor = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')} 
>>> a = numpy.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=mydescriptor) 
>>> print a 
[('M', 64.0, 75.0) ('F', 25.0, 60.0)] 
>>> a.shape 
(2,) 
>>> a.resize(3) 
>>> a.shape 
(3,) 
>>> print a 
[('M', 64.0, 75.0) ('F', 25.0, 60.0) ('', 0.0, 0.0)] 
>>> a[2] = ('X', 17.0, 61.5) 
>>> print a 
[('M', 64.0, 75.0) ('F', 25.0, 60.0) ('X', 17.0, 61.5)] 
+0

Czy możesz pokazać jakiś kod demonstracyjny? Moja próba wywołania arr.resize() zakończyła się ValueError: nie można zmienić rozmiaru tej tablicy: nie ma ona swoich danych – unutbu

+1

@unutbu, pewnie, edytowana odpowiedź na dostarczenie prostego przykładu. Możesz napotkać problemy omówione w tym wątku: http://aspn.activestate.com/ASPN/Mail/Message/numpy-discussion/3042521 - wtedy możesz je naprawić, jak wspomina Travis Oliphant, dodając refcheck = 0 argumentu wywołania zmiany rozmiaru (chyba, że ​​HAVE udostępnił dane, w takim przypadku nie można już zmienić rozmiaru w miejscu (uwaga, że ​​to, co Travis wspomina jako cechę SVN głowy numpy, było częścią regularnie wydawanego numpy dla już dawno - ten wątek ma 3+ lat ;-) –

+0

Dziękuję! a.resize (3, refcheck = 0) zrobiła to dla mnie – unutbu

Powiązane problemy