# How to assign matrix (vector) value to variable

when I tried to assign a matrix or a vector to variables, something wrong happens:

sage: sin([1,2,3,4]).n()
Traceback (click to the left of this block for traceback)
...
TypeError: cannot coerce arguments: no canonical coercion from <type
'list'> to Symbolic Ring


what I want to achieve is that the out put gives a vector that equals to [sin(1),sin(2),sin(3),sin(4)].

edit retag close merge delete

Sort by ยป oldest newest most voted

In programs like Numpy or R, this would be very reasonable behavior to expect. Those are data analysis tools.

R:

> sin(c(1,2,3,4))
[1]  0.8414710  0.9092974  0.1411200 -0.7568025


Numpy:

sage: import numpy as np
sage: sin(np.array([1,2,3,4]))
array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 ])


Sage is mathematical, however. So you will have to explicitly apply the function to all entries. Python makes this easy using list comprehensions or the map function.

sage: [sin(l).n() for l in [1,2,3,4]]
[0.841470984807897, 0.909297426825682, 0.141120008059867, -0.756802495307928]
sage: map(sin,[1,2,3,4])
[sin(1), sin(2), sin(3), sin(4)]
sage: map( lambda x: sin(x).n(), [1,2,3,4])
[0.841470984807897, 0.909297426825682, 0.141120008059867, -0.756802495307928]

more

Thanks! this does the trick for me!

( 2013-10-08 19:20:56 -0500 )edit