Well, I'll reply to myself on this. I made a ticket and attached a patch (to the ticket). I do want some other people looking at it to see if there are more elegant fixes. It does make a quite noticable runtime difference on 7x7 matrices (I was rather amazed how much the difference was actually).
http://trac.sagemath.org/sage_trac/ticket/822 -- Joel On Wednesday 03 October 2007 21:52, Joel B. Mohler wrote: > Hi, > > It would have been nice to sit down in person with Robert and/or William > about this at Clay, but I only fully realized the extent of my questions > about 1.5 hours before I wanted to leave :). Anyhow, the matrix > multiplication process is looking a bit inefficient to me. > > Here's the situation: > sage: M=MatrixSpace(ZZ,3,3) > sage: m=M([range(9)]) > sage: n=M([range(1,10)]) > sage: prun m*n > 20 function calls in 0.000 CPU seconds > Ordered by: internal time > ncalls tottime percall cumtime percall filename:lineno(function) > 1 0.000 0.000 0.000 0.000 <string>:1(<module>) > 2 0.000 0.000 0.000 0.000 > matrix_space.py:105(MatrixSpace) 1 0.000 0.000 0.000 0.000 > matrix_space.py:282(change_ring) 1 0.000 0.000 0.000 0.000 > matrix_space.py:306(base_extend) 1 0.000 0.000 0.000 0.000 > matrix_space.py:648 > (matrix_space) > 3 0.000 0.000 0.000 0.000 matrix_space.py:670(ncols) > 3 0.000 0.000 0.000 0.000 matrix_space.py:681(nrows) > ... > > The most alarming thing in that is the "base_extend" call. Both have a > base of ZZ (It also happens if both matrices are in MatrixSpace(QQ)). > This occurs because of a call to base_base_extend_canonical_sym_c around > line 2075 in element.pyx. The other thing that alarms me is the calls > to "matrix_space" and "MatrixSpace" to construct a new parent space. These > are square matrices so we should not have to call out to the (python) > parent ring to make a new parent ring. > > Now, both of these are easily enough fixed by an appropriate if statement > above the offending lines of code. However, it seems that this could all > be fit into the coercion model a little more seamlessly. It seems that the > Matrix.__mul__ method pretty much takes over and does it's own thing. > > Any thoughts (especially from the coercion guru)? Craig suggested that > matrix multiplication could be viewed as an action in the coercion model, > but I'm not sure I agree. Mathematically, if element 'a' acts on element > 'b', I expect the result to have the same parent as 'b', but that isn't the > case with non-square matrices in general. I don't know if that definition > of 'action' is the same as the coercion model's. > > -- > Joel > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/ -~----------~----~----~----~------~----~------~--~---