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