# [SciPy-User] Populating a recarray from 0 size

Sun Aug 22 15:44:02 CDT 2010

```Is there any way of knowing the final size in advance so you can pre-allocate
the array? Or at least guessing it with reasonable accuracy so that you can
pre-allocate a slightly larger array and then cut it down to size? Either of
these is likely to be significantly faster than resizing an array at each
iteration.

Something else to look at would be the hstack/vstack functions, although you pay
a similar performance penalty as with resizing.

David

----- Original Message ----
From: Sergi Pons Freixes <spons@utm.csic.es>
To: SciPy Users List <scipy-user@scipy.org>
Sent: Sun, 22 August, 2010 1:18:04 PM
Subject: [SciPy-User] Populating a recarray from 0 size

Hi everybody,

I'm interested in populating a recarray a row at a time. I thought in using:

-------
# Creation of empty recarray
names = ["cruise", "SEQ", "param", "r2", "stderr", "slope", "intercept"
formats = ["i4", "i4", "S10", "f4", "f4", "f4", "f4"]
statsc = scipy.empty(0, dtype={"names":names, "formats":formats})

# Adding row and setting values
statsc = scipy.resize(statsc, statsc.size + 1)
statsc["cruise"][-1] = cr
statsc["SEQ"][-1] = ca
statsc["param"][-1] = yvar
...
-------

But scipy.resize complains with:
statsc = scipy.resize(statsc, statsc.size + 1)
File "/usr/lib/python2.6/site-packages/numpy/core/fromnumeric.py",
line 833, in resize
if not Na: return mu.zeros(new_shape, a.dtype.char)
ValueError: Empty data-type

So, is scipy not happy because statsc.size is 0 on the first resize?
In this case, how could I overcome this limitation?

Regards,
Sergi

--
Sergi Pons Freixes
Ph.D. Student
Marine Technology Unit
Centre Mediterrani d'Investigacions Marines i Ambientals (CMIMA-CSIC)
Pg. Marítim Barceloneta, 37-49
E-08003 Barcelona (Spain)
Ph.  +34 93 230 95 00 (ext. 1510)
Fax. +34 93 230 95 55
spons@utm.csic.es
http://www.utm.csic.es
_______________________________________________
SciPy-User mailing list
SciPy-User@scipy.org
http://mail.scipy.org/mailman/listinfo/scipy-user

```