On Tue, Feb 26, 2019 at 5:42 PM Pierre Guillot <[email protected]> wrote: > > Hi again, > > Mostly, this does the job : > > def sparse_magma_matrix(mat): > s= "SparseMatrix(" + str(mat.nrows()) + ", " + str(mat.ncols()) + ", [" > entries= ", ".join([ "<"+str(i+1)+", " + str(j+1)+", "+str(mat[i,j])+">" > for i,j in mat.dict() ]) > return s + entries + "])" > > One should probably worry about the coefficient ring -- as such, it only > works if Magma can guess what it is by itself. > > For anyone reading this, concretely, i have then tried: > > f= open("foo.m", "w") > f.write("M:= " + sparse_magma_matrix(mat) + ";") > f.close() > > Then within Magma, I have created the polynomial ring -- which, it turned > out, had to be the appropriate fraction field, otherwise the determinant > function does not work -- so in my case : > > R<a0, a1, a2, a3, a4, a5>:= FunctionField(GF(5), 6) ; > > and then: > > load "foo.m"; > > (don't forget the ; at the end!!!) > > Then i tried > > Determinant(M); > > and, amazingly, Magma gives an answer instantly. Absolutely incredible :-)
Can Sage do this determinant on its own? Just wondering (yes, Sage is lacking in sparse matrices over multivariate polynomial rings support). > > > > > > > > > > > On Tuesday, February 26, 2019 at 6:21:44 PM UTC+1, John Cremona wrote: >> >> >> >> On Tue, 26 Feb 2019 at 17:01, Vincent Delecroix <[email protected]> wrote: >>> >>> I don't think this has ever been implemented in Sage. You >>> have to figure out how to create a sparse matrix in magma >>> and write Sage code to produce it. You can get inspiration >>> from the current code of _magma_init_ >>> >>> def _magma_init_(self): >>> P = magma(self.parent()) >>> v = [x._magma_init_(magma) for x in self.list()] >>> return '%s![%s]'%(P.name(), ','.join(v)) >>> >>> Vincent >> >> >> This would be a very useful addition (for some people). Magma constructs >> sparse matrices using SparseMatrix() with several interfaces including >> >> (m::RngIntElt, n::RngIntElt, Q::SeqEnum[Tup]) -> MtrxSprs >> >> The m by n sparse matrix, whose entries are given by the tuples in Q >> of the form <i, j, x> (specifying that x is at entry (i, j)). >> >> Example: >> >> > M:=SparseMatrix(3,3,[<1,1,1>,<2,2,1>,<3,3,1>]); >> > IdentitySparseMatrix(Integers(), 3) eq M; >> true >> >> >> >>> >>> >>> Le 26/02/2019 à 17:55, Pierre Guillot a écrit : >>> > Thanks! I think to know where the issue is : >>> > >>> > M= random_matrix(ZZ, 10, sparse= True, density= 0.1) >>> > M._magma_init_(magma) >>> > >>> > '_sage_[11]![0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-14,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,0,0,0]' >>> > >>> > >>> > This does not look like a sparse matrix to me : it's been converted to a >>> > "dense" matrix before magma code was produced... >>> > >>> > no wonder if my 50,000 x 50,000 matrix takes forever to load... >>> > >>> > If anyone has an easy fix, it would be great. Otherwise, i'll have to >>> > learn >>> > the syntax for sparse matrices in magma, and figure out how magma reads >>> > from a file... >>> > >>> > >>> > >>> > >>> > >>> > >>> >>> -- >>> 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 https://groups.google.com/group/sage-support. >>> For more options, visit https://groups.google.com/d/optout. > > -- > 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 https://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/d/optout. -- 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 https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
