Ask Your Question


asked 2015-10-07 20:00:40 -0500

dr gravatar image

updated 2015-10-07 20:00:55 -0500

I feel really stupid like this should be obvious, but I can't figure out how to do it.

v = vector([1,2,3])

should give me

[2, 4, 8]

I can't find any other way to do this without writing a function.

edit retag flag offensive close merge delete

2 answers

Sort by ยป oldest newest most voted

answered 2015-10-07 21:03:52 -0500


In Python (and hence Sage) you have very useful list comprehension

sage: my_list = [1, 2, 3, 4]
sage: [2^i for i in my_list] 
[2, 4, 8, 16]

If you use vectors, you can alternatively do

sage: v = vector([1, 2, 3, 4])
sage: v.apply_map(lambda x: 2^x)
(2, 4, 8, 16)


edit flag offensive delete link more


That makes writing the function easier, but for readability in the middle of an equation it leaves a lot to be desired.

dr gravatar imagedr ( 2015-10-08 04:22:26 -0500 )edit

answered 2015-10-08 09:04:24 -0500

fidbc gravatar image

updated 2015-10-08 09:34:55 -0500

vdelecroix's answer is perfectly fine. I just wanted to add that if you insist on being able to use 2**v then maybe you will like numpy. See here for an example.

Update: It is possible to use 2.^v from within sage if v is a numpy array (see link above).

edit flag offensive delete link more




I guess I don't understand the relationship between sage and numpy or scipy or really any of the packages. Why is numpy not the default. What are the implications of doing the import? Are numpy vectors going to interact with the plotting correctly? Etc.

Ugh, I didn't even notice the difference between "through sage" and "with python". .^ works in one and errors in the other, while ^ is the reverse. I don't understand. What document gives a map for how all these things interact?

dr gravatar imagedr ( 2015-10-08 09:18:52 -0500 )edit

You are right, that works. I'll update the answer, thanks!

Numpy is a Python package intended for scientific computing and you have the option of using it through Sagemath. Doing the import will load the array function from numpy (in this case). I can't think of any errors you can run into if you try to plot from numpy arrays.

fidbc gravatar imagefidbc ( 2015-10-08 09:32:10 -0500 )edit

In Python ^ stands for bitwise xor. Sagemath was designed to override the meaning of ^ to be exponentiation. If you want to keep on the safe side you can just use ** which means exponentiation in both Python and Sagemath. A bit of this is explaned here.

fidbc gravatar imagefidbc ( 2015-10-08 09:40:37 -0500 )edit

Right, I know what numpy is. I just assumed the default python-like interaction I'm doing in a sagecell WAS numpy. Instead it's another language? Or something?

dr gravatar imagedr ( 2015-10-08 09:42:54 -0500 )edit

It is "the same language", it is just that Sagemath has its own way of defining/handling vectors, and Numpy has also its own way of handling them, they are just meant for different purposes. Which one to use? That depends on what you want to do.

fidbc gravatar imagefidbc ( 2015-10-08 09:49:27 -0500 )edit

Your Answer

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

Add Answer

Question Tools

1 follower


Asked: 2015-10-07 20:00:40 -0500

Seen: 102 times

Last updated: Oct 08 '15