[Numpy-discussion] Tracking and inspecting numpy objects
hoogendoorn.eelco at gmail.com
Mon Sep 15 06:05:17 EDT 2014
On Mon, Sep 15, 2014 at 11:55 AM, Sebastian Berg <sebastian at sipsolutions.net
> On Mo, 2014-09-15 at 10:16 +0200, Mads Ipsen wrote:
> > Hi,
> > I am trying to inspect the reference count of numpy arrays generated by
> > my application.
> > Initially, I thought I could inspect the tracked objects using
> > gc.get_objects(), but, with respect to numpy objects, the returned
> > container is empty. For example:
> > import numpy
> > import gc
> > data = numpy.ones(1024).reshape((32,32))
> > objs = [o for o in gc.get_objects() if isinstance(o, numpy.ndarray)]
> > print objs # Prints empty list
> > print gc.is_tracked(data) # Print False
> > Why is this? Also, is there some other technique I can use to inspect
> > all numpy generated objects?
> Two reasons. First of all, unless your array is an object arrays (or a
> structured one with objects in it), there are no objects to track. The
> array is a single python object without any referenced objects (except
> possibly its `arr.base`).
> Second of all -- and this is an issue -- numpy doesn't actually
> implement the traverse slot, so it won't even work for object arrays
> (numpy object arrays do not support circular garbage collection at this
> time, please feel free to implement it ;)).
> - Sebastian
Does this answer why the ndarray object itself isn't tracked though? I must
say I find this puzzling; the only thing I can think of is that the python
compiler notices that data isn't used anymore after its creation, and
deletes it right after its creation as an optimization, but that conflicts
with my own experience of the GC.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion