2009-10-21 18 views
6

Yeni bir yeniden sıralama oluşturmadan, bir kayıt/satır bir sayısal yeniden karışıma eklemenin kolay bir yolu var mı? Hafızada 1Gb alan bir recarrayim olduğunu varsayalım, pythonun 2Gb hafızasını geçici olarak almasına gerek kalmadan bir satır ekleyebilmeyi istiyorum.Sayısal yeniden sıralama dizisine satır ekleme

cevap

10

Bir satır daha içeren bir şekle yourrecarray.resize numaralı telefonu arayabilir ve daha sonra bu yeni satıra atayabilirsiniz. Tabii ki. bir örnek talep edildiğinden, gelir burada,)

- sadece yerinde dizisi büyümesi için bir oda yoksa numpykudreti hala tamamen yeni bellek ayırmak zorunda, ama en azından bir şansın! kural dışı olarak değiştirilmiş 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

Bazı tanıtım kodu gösterebilir misiniz? Arr.resize() çağırma girişimim, ValueError ile sona erdi: Bu diziyi yeniden boyutlandıramıyor: Verileri – unutbu

+1

@unutbu, emin, basit bir örnek vermek için düzenlenmiş cevabı yok. Bu konuda tartışılan sorunlarla karşılaşıyor olabilirsiniz: http://aspn.activestate.com/ASPN/Mail/Message/numpy-discussion/3042521 - daha sonra bunları düzeltebilirsiniz. Yeniden boyutlandırma çağrısına 0 argümanı (veriyi paylaşmadıkça, bu durumda artık yerinde yeniden boyutlandırma yapılamaz) (Not: SVN'nin numpy başlığının bir özelliği olarak bahsettiği şeyin düzenli olarak yayınlanan Şimdiye kadar çok uzun bir süre - bu iş parçacığı 3+ yaşında ;-) –

+0

Teşekkür ederim! a.resize (3, refcheck = 0) benim için hile yaptı – unutbu