By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
 435,011 Members | 2,967 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,011 IT Pros & Developers. It's quick & easy.

# Function to resize global numpy array interactively in ipython

 P: n/a 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? Thanks and best wishes, David. Oct 29 '07 #1
Share this Question
2 Replies

 P: n/a 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. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco Oct 29 '07 #2

 P: n/a On Oct 29, 11:07 am, Robert Kern

### This discussion thread is closed

Replies have been disabled for this discussion.