On Saturday 28 January 2012, Benjamin Howard wrote:
> Hi --
> 
> I have an application in mind where I desperately
> need a faster implementation of the matrix methods:
> 
> matrix_from_columns
> matrix_from_rows_and_columns
> matrix_from_rows
> 
> I am aware that these will not be as fast as the submatrix method (for
> contiguous
> submatrices) but the above three methods are still too slow by far...
> 
> I'm hoping that someone could spend a little bit of time to write
> faster versions of these (maybe
> just cythonize them...)?   I do not know how to do this myself or I'd
> be glad to.   Just to give an idea of how slow they are currently, see
> below:
> 
> #my own ad hoc matrix_from_columns:
> def My_matrix_from_columns(mat,cols):
>     set_all_cols = set(range(mat.ncols()))
>     set_compl_cols = set_all_cols.difference(set(cols))
>     compl_cols = list(set_compl_cols)
>     all_cols = cols + compl_cols
>     all_cols_one_up = [j+1 for j in all_cols]
>     p = sage.combinat.permutation.Permutation(all_cols_one_up)
>     p_matrix = p.to_matrix()
>     mat_perm = mat * p_matrix
>     return mat_perm.submatrix(0,0,mat_perm.nrows(),len(cols))
> 
> (I'm running sage-4.8, compiled from source on a pretty basic desktop
> computer)
> 
> sage: M = Matrix(GF(2),5000,5000); M.randomize()
> sage: L = range(5000); shuffle(L); L = L[:2500]
> sage: time N = M.matrix_from_columns(L)
>          Time: CPU 2.72 s, Wall: 2.73 s
> sage: time N2 = My_matrix_from_columns(M,L)
>          Time: CPU 0.43 s, Wall: 0.45 s
> 
> Surely, going to all the trouble of building that permutation matrix
> after constructing
> the complement to L in range(M.ncols()) (and adding one to get a valid
> permutation
> which unfortunately isn't 0-based), then,
> multiplying by the permutation matrix,
> then extracting the contiguous submatrix, seems like it should have
> been slower
> than the native method from the matrix class?

How soon do you need it? I'm asking because I don't know how soon I could make 
this happen, but I'm sure we can make this much much faster by doing this in 
the M4RI library itself, i.e., in C. Do you know a bit of C?

Cheers,
Martin

--
name: Martin Albrecht
_pgp: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x8EF0DC99
_otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF
_www: http://martinralbrecht.wordpress.com/
_jab: martinralbre...@jabber.ccc.de

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to