On Thursday, 4 December 2014 07:27:21 UTC+1, Nathann Cohen wrote: > > Also, I do not understand why you have so many expressions like: > > (val*bm.transpose())[0,0] > val*bm.transpose() is actually a number but the way Sage handles it is awkward:
sage: M = Matrix(RR,[[1],[1]]) sage: Matrix(RR,[[-1,0]])*M [-1.00000000000000] sage: abs(Matrix(RR,[[-1,0]])*M) -1.00000000000000 # some norm of the matrix?? soo I either have to do abs(abs(...)) or access the (only) element of the matrix. > > If you have performance problems, do not compute a whole matrix if you > are only interested by its [0,0] coordinate O_o > > You call j.transpose() repeatedly. Store jt=j.transpose() and use it. > > Store and use bm.transpose() instead of bm. You tanspose bm when you > use it in the first loop, and you transpose bm() again in > vec2int[j].transpose(). > > Also, given that the profiling does not say much of where 99% of the > computations is going, try to run your code without the .write() calls > (and their internal str() calls). Make it run without storing anything > and see how it goes. Perhaps you should store the results directly as > Sage objects using "save" and not as strings... No idea, you need to > test things ^^; > Thanks for the suggestions I'll check them out. > > Nathann > > On 4 December 2014 at 03:44, Nils Bruin <[email protected] <javascript:>> > wrote: > > On Wednesday, December 3, 2014 1:33:46 PM UTC-8, Jernej wrote: > >> > >> > >> for i in xrange(1, cur): > >> for j in xrange(i+1, cur): > >> iv = (cache[i]*vec2int[j].transpose())[0,0] > > > > > > It looks like you should rewrite this loop so that j is the out > variable, so > > that you can pull > > vec2int[j].transpose() > > to the out loop. No need to cache it. > > > > In any case, your profiling data indicates: > > > > 1 85.572 85.572 113.024 113.024 > > <string>:9(constructGraph_fast) > > 3733128 10.413 0.000 10.413 0.000 > > matrix_space.py:145(__classcall__) > > 1604418 9.434 0.000 19.921 0.000 {method 'transpose' of > > 'sage.matrix.matrix_dense.Matrix_dense' objects} > > 1604418 3.186 0.000 4.174 0.000 {method '__copy__' of > > 'sage.matrix.matrix_generic_dense.Matrix_generic_dense' objects} > > > > so most time is spent in "constructGraph_fast", which I guess is your > > program itself. The transpose is a bit noticeable but hardly constitutes > the > > majority of the time. The construction for the matrix spaces is incurred > > twice: both for the transpose and for computing the product. By pulling > the > > transpose to the outside loop that should roughly be cut in half (and > you'd > > only have the sqrt of the number of transposes). > > > > It looks like most time is getting lost in basic python interpretation > and > > shuffling around elements. If you make a big matrix out of cache[i] > vectors, > > you can eliminate the loop over i. The only thing left would be > inspecting > > the elements, for which you can then write a simple cython routine > (which > > should be lightning fast). > -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
