Is there a way to list all of the arrays that are referencing a given array? Similarly, is there a way to get a list of all arrays that are currently in memory? Thanks, Alex
Hi Alexander On Thu, Feb 14, 2008 at 03:43:46PM -0500, Alexander Michael wrote:
Is there a way to list all of the arrays that are referencing a given array? Similarly, is there a way to get a list of all arrays that are currently in memory?
As far as I know, the reference count to the array is increased when you create a view, but the views themselves are not tracked anywhere. You can therefore say whether there are references around, but you cannot identify the Python objects. I'm curious why you need this information -- maybe there is an alternative solution to your problem? Regards Stéfan
On Fri, Feb 15, 2008 at 7:12 AM, Stefan van der Walt <stefan@sun.ac.za> wrote:
As far as I know, the reference count to the array is increased when you create a view, but the views themselves are not tracked anywhere. You can therefore say whether there are references around, but you cannot identify the Python objects.
I would like to occasionally dynamically grow an array (i.e. add length to existing dimensions) as I do not know th ultimately required length beforehand, but I have a good guess so I won't be need to reallocate that often if at all. The only way I know how to do this is numpy is to create a new larger array with the new dimensions and copy the existing data from the smaller array into it. Perhaps there is a better way that doesn't invalidate views on the array? I want to make sure that there are no outstanding references to the old array (i.e. views on it, etc.) so that I can raise a helpful exception while developing. Robin and Davide- Thanks for the pointer to the numpy.who method, while that only searches in a specified dictionary, it was the method that I thought I had encountered before.
On Fri, Feb 15, 2008 at 08:28:08AM -0500, Alexander Michael wrote:
On Fri, Feb 15, 2008 at 7:12 AM, Stefan van der Walt <stefan@sun.ac.za> wrote:
As far as I know, the reference count to the array is increased when you create a view, but the views themselves are not tracked anywhere. You can therefore say whether there are references around, but you cannot identify the Python objects.
I would like to occasionally dynamically grow an array (i.e. add length to existing dimensions) as I do not know th ultimately required length beforehand, but I have a good guess so I won't be need to reallocate that often if at all. The only way I know how to do this is numpy is to create a new larger array with the new dimensions and copy the existing data from the smaller array into it. Perhaps there is a better way that doesn't invalidate views on the array? I want to make sure that there are no outstanding references to the old array (i.e. views on it, etc.) so that I can raise a helpful exception while developing.
Numpy does complain if you attempt to resize an array with views on it: In [8]: x = np.array([1,2,3]) In [14]: y = x[::-1] In [18]: x.resize((4,)) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /tmp/<ipython console> in <module>() ValueError: cannot resize an array that has been referenced or is referencing another array in this way. Use the resize function You can catch that exception and work from there. I hope that is what you had in mind? Regards Stéfan
On Fri, Feb 15, 2008 at 11:51 AM, Stefan van der Walt <stefan@sun.ac.za> wrote:
Numpy does complain if you attempt to resize an array with views on it:
In [8]: x = np.array([1,2,3])
In [14]: y = x[::-1]
In [18]: x.resize((4,)) --------------------------------------------------------------------------- ValueError Traceback (most recent call last)
/tmp/<ipython console> in <module>()
ValueError: cannot resize an array that has been referenced or is referencing another array in this way. Use the resize function
You can catch that exception and work from there. I hope that is what you had in mind?
Actually, I'm essentially trying to figure out how situations like that are arising. I'm not using resize, because it reshapes the array when adding to any dimension other than the first. At "the end of the day" I want to enlarge an array without leaving any "references" dangling. Thanks for the suggestion! Alex
On Thu, Feb 14, 2008 at 8:43 PM, Alexander Michael <lxander.m@gmail.com> wrote:
Is there a way to list all of the arrays that are referencing a given array? Similarly, is there a way to get a list of all arrays that are currently in memory?
For the second question, if you are working interactively in Ipython, you can do %who ndarray or %whos ndarray to get a list of arrays. It might be possible to get this functionality within a script/program through the ipython api, but I'm afraid I don't know much about that. Cheers, Robin
Whith "standard" Python:
who()
Robin ha scritto:
On Thu, Feb 14, 2008 at 8:43 PM, Alexander Michael <lxander.m@gmail.com> wrote:
Is there a way to list all of the arrays that are referencing a given array? Similarly, is there a way to get a list of all arrays that are currently in memory?
For the second question, if you are working interactively in Ipython, you can do %who ndarray or %whos ndarray to get a list of arrays.
It might be possible to get this functionality within a script/program through the ipython api, but I'm afraid I don't know much about that.
Cheers,
Robin _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
participants (4)
-
Alexander Michael
-
Davide Albanese
-
Robin
-
Stefan van der Walt