By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,491 Members | 1,168 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,491 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
Share on Google+
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 <robert.k...@gmail.comwrote:
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.

Oct 29 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.