Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168741
Image: ubuntu2004
%cython from sage.rings.complex_double cimport ComplexDoubleElement from sage.rings.complex_double import CDF cdef ComplexDoubleElement one = CDF(1), zero = CDF(0) import numpy cdef class Matrix2: cdef complex m00, m01, m10, m11 def __init__(self, complex a, complex b,complex c,complex d): self.m00=a; self.m01=b; self.m10=c; self.m11=d def __repr__(self): # TODO: slow return repr(self.numpy()) def numpy(self): # TODO: slow return numpy.array([[self.m00, self.m01], [self.m10, self.m11]]) def __mul__(Matrix2 self not None, Matrix2 right not None): cdef Matrix2 res = PY_NEW(Matrix2) res.m00=self.m00*right.m00+self.m01*right.m10 res.m01=self.m00*right.m01+self.m01*right.m11 res.m10=self.m10*right.m00+self.m11*right.m10 res.m11=self.m10*right.m01+self.m11*right.m11 return res
v = [CDF(a) for a in 1,2,3,4] a = Matrix2(*v); a2 = Matrix2(*reversed(v)) b = matrix(CDF, 2, v); b2 = matrix(CDF, 2, list(reversed(v))) c = b.numpy(); c2 = b2.numpy()
a*a2
array([[ 8.+0.j, 5.+0.j], [ 20.+0.j, 13.+0.j]])
b*b2
[ 8.0 5.0] [20.0 13.0]
c.dot(c2)
array([[ 8.+0.j, 5.+0.j], [ 20.+0.j, 13.+0.j]])
timeit('a*a2')
625 loops, best of 3: 138 ns per loop
timeit('b*b2')
625 loops, best of 3: 20.8 µs per loop
timeit('c.dot(c2)')
625 loops, best of 3: 2.44 µs per loop
2.44/.138
17.6811594202899
20.8/.138
150.724637681159