First time here? Check out the FAQ!

Ask Your Question
1

example for numpy.mgrid doesn't work

asked 11 years ago

AndreWin gravatar image

updated 5 years ago

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...

Preview: (hide)

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 ( 11 years ago )
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 ( 11 years ago )

2 Answers

Sort by » oldest newest most voted
0

answered 11 years ago

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.

Preview: (hide)
link

Comments

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

kcrisman gravatar imagekcrisman ( 11 years ago )
0

answered 11 years ago

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.

Preview: (hide)
link

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: 11 years ago

Seen: 1,718 times

Last updated: Jun 27 '19