[SciPy-User] Scipy views and slicing: Can I get a view-slice from only certain elements of an array?
Christopher Barker
Chris.Barker at noaa.gov
Mon Nov 1 18:15:45 EDT 2010
On 10/30/10 3:04 AM, Francesc Alted wrote:
> A Saturday 30 October 2010 12:00:05 Francesc Alted escrigué:
>> NumPy arrays helps saving space too:
>>>>> sys.getsizeof(l)
>>
>> 8072
>>
>>>>> a.size*a.itemsize
>>
>> 8000 # 72 bytes less, not a lot but better than nothing
>
> Ooops. I forgot to include the numpy headers to this. So, probably a
> NumPy container is not more efficient (space-wise) than a plain list
> (unless you use shorter integers ;-)
hmmm -- I was surprised by this -- I always thought that numpy arrays
were more space efficient. And, indeed, I think they are.
sys.getsizeof(a_list)
Is returning the size of the list object, which holds pointers to the
pyobjects in the list -- so 4 bytes per object on my32 bit system.
so, if each of those objects is an int, then you need to do:
sys.getsizeof(l) + len(l)*sys.getsizeof(l[0])
and a python int is 12, rather than 4 bytes, due to the pyobject overhead.
similarly for numpy arrays:
sys.getsizeof(a) + a.size*a.itemsize
so:
>>> l = range(1000)
>>> sys.getsizeof(l) + len(l)*sys.getsizeof(l[0])
16036
>>> a = numpy.arange(1000)
>>> sys.getsizeof(a) + a.size*a.itemsize
4040
major difference (unless you are using a numpy array of objects...)
By the way: python lists over-allocate when you append, so that future
appending can be efficient, so there is some overhead there (though not
much, really)
Someone please correct me if I'm wrong -- I am planning on using this as
an example in a numpy talk I'm giving to a local user group.
-Chris
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the SciPy-User
mailing list