Ask Your Question
1

example for numpy.mgrid doesn't work

asked 2013-05-03 04:39:59 +0100

AndreWin gravatar image

updated 2019-06-27 07:40:07 +0100

slelievre gravatar image

Hello! I type in sage notebook 5.8 on my local computer:

import numpy as np
np.mgrid?
....
example:
>>> np.mgrid[-1:1:5j]
array([-1. , -0.5,  0. ,  0.5,  1. ])

But when I type in my notebook:

np.mgrid[-1:1:5j]

and press shift-enter, I get mistake: TypeError: Unable to convert -0.200000000000000*I to float; use abs() or real_part() as desired

It seems to me it's the bug...

edit retag flag offensive close merge delete

Comments

That's the preparser. Well, in Python typically `1j**2` becomes `(-1+0j)`; `j` is a complex number ala electrical engineering. What surprises me is that numpy would use j for some other purpose.

kcrisman gravatar imagekcrisman ( 2013-05-03 11:51:27 +0100 )edit
1

Indeed, in the documentation for `mgrid`: "However, if the step length is a **complex number** (e.g. 5j)," so basically this is a numpy hack, in my opinion.

kcrisman gravatar imagekcrisman ( 2013-05-03 11:51:57 +0100 )edit

2 Answers

Sort by ยป oldest newest most voted
0

answered 2013-05-03 10:42:37 +0100

calc314 gravatar image

Sage is interpreting this as complex for some reason. But, np.mgrid[-1:1:0.15] seems to be working for me.

edit flag offensive delete link more

Comments

In the notebook, the user could also just evaluate all cells in pure Python, if so desired.

kcrisman gravatar imagekcrisman ( 2013-05-03 11:53:00 +0100 )edit
0

answered 2013-05-07 05:11:14 +0100

slelievre gravatar image

You can bypass the Sage preparser by appending r (for raw) to numerical input.

sage: import numpy as np
sage: np.mgrid[-1:1:5jr]
array([-1. , -0.5,  0. ,  0.5,  1. ])

Note that some preparsing is still going on with -1 and 1 which are converted to Sage integers by the preparser before going to numpy's mgrid. If you want to feed numpy's mgrid with raw Python integers:

sage: np.mgrid[-1r:1r:5jr]
array([-1. , -0.5,  0. ,  0.5,  1. ])

It's the same result, except less conversion was done on the way.

On a related note, you can get a Python integer by doing

sage: int(1)

but when you do this, the preparsing stage means what is really done is

int(Integer(1))

so the Python integer 1 is converted to a Sage integer and back to a Python integer.

Bypassing the Sage preparser with

sage: 1r

gets you the Python integer straight away.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2013-05-03 04:39:59 +0100

Seen: 1,646 times

Last updated: Jun 27 '19