ASKSAGE: Sage Q&A Forum - RSS feedhttps://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Sat, 20 Aug 2016 16:26:46 +0200Should I use numpy and cython for complex numbers?https://ask.sagemath.org/question/34541/should-i-use-numpy-and-cython-for-complex-numbers/Here is the problem:
if I try this:
var('z')
z = 1+2*I
type(z)
<type 'sage.symbolic.expression.Expression'>
So, it isn't a complex number. BUT, if I do this:
I = CC.0
z = 1+2*I
type(z)
then I get a complex number
<type 'sage.rings.complex_number.ComplexNumber'>
**Should I use numpy and cython for complex numbers?**Sat, 20 Aug 2016 15:24:19 +0200https://ask.sagemath.org/question/34541/should-i-use-numpy-and-cython-for-complex-numbers/Answer by tmonteil for <p>Here is the problem:</p>
<p>if I try this:</p>
<pre><code>var('z')
z = 1+2*I
type(z)
<type 'sage.symbolic.expression.Expression'>
</code></pre>
<p>So, it isn't a complex number. BUT, if I do this:</p>
<pre><code>I = CC.0
z = 1+2*I
type(z)
</code></pre>
<p>then I get a complex number</p>
<pre><code><type 'sage.rings.complex_number.ComplexNumber'>
</code></pre>
<p><strong>Should I use numpy and cython for complex numbers?</strong></p>
https://ask.sagemath.org/question/34541/should-i-use-numpy-and-cython-for-complex-numbers/?answer=34542#post-id-34542It depends on what kind of complex number you want. Sage provide tons, you do not need numpy, cython or whatever. Here are some examples (these are not the only ones):
With
sage: z = 1+2*I
sage: z.parent()
Symbolic Ring
You indeed get symbolic representation of a complex number, so you can do symboloc things such as:
sage: exp(pi*z).simplify()
e^pi
WIth
sage: z = 1+2*CDF.0
sage: z.parent()
Complex Double Field
You get a fast numerical representation of your complex number (you should prefer `CDF` over `CC` since both have the same precision, but `CDF` takes the advantage of the CPU floating-point arithmetics, and the functions you will call from it will use optimized libraries).
With
sage: z = 1+2*ComplexIntervalField(1000).0
sage: z.parent()
Complex Interval Field with 1000 bits of precision
You get a certified numerical representation of your complex number with high precision (interval arithmetics).
With
sage: z = 1+2*QQbar.0
sage: z.parent()
Algebraic Field
You get an algebraic (hence exact) representation of your complex number (but `pi` does not exist here).
With
sage: z = 1+2*ZZ[i].1
sage: z.parent()
Gaussian Integers in Number Field in I with defining polynomial x^2 + 1
You get a Gaussian integer.
And so on...
Now, you just have to decide what do you want to do with `z` to select an appropriate representation.Sat, 20 Aug 2016 16:26:46 +0200https://ask.sagemath.org/question/34541/should-i-use-numpy-and-cython-for-complex-numbers/?answer=34542#post-id-34542