Function to resize global numpy array interactively in ipython

David Sanders dpsanders at gmail.com
Mon Oct 29 18:29:58 EDT 2007


On Oct 29, 11:07 am, Robert Kern <robert.k... at gmail.com> wrote:
> David Sanders wrote:
> > Hi,
>
> > I have a script with function definitions which I load into ipython
> > for interactive use.
> > These functions modify a global numpy array, whose size I need to be
> > able to change interactively.  I thus have a script which looks like
> > this:
>
> > from numpy import *
>
> > def do_resize(N):
> >    global a
> >    a = resize(a, N)
>
> > a = array([])
>
> > N=10; do_resize(N)
> > print "Length of a is: ", len(a)
> > N=20; do_resize(N)
> > print "Length of a is: ", len(a)
>
> > If I run this in ipython, using "run resize.py", it correctly outputs
> > 10 and then 20.
> > If I now type *interactively*  N=30; do_resize(N),  then the length of
> > a is still 20, rather than 30 as I was hoping -- somehow I seem to be
> > now dealing with a different copy of a?
>
> > Doing the same thing in idle works as I expect, i.e. interactively the
> > size is changed to 30.
>
> > Could somebody please explain what's going on, and how I solve the
> > problem?
>
> By default, %run executes the script in its own namespace. Then the interactive
> prompt's namespace gets updated with the values in that namespace. The global
> statement refers to that initial namespace, not the one of the interactive
> prompt. Give "%run -i resize.py" a try, though. That should execute the code in
> the interactive prompt's namespace.

Great, that's exactly what I needed!
Thanks very much.

David.




More information about the Python-list mailing list