Hi Martin, On 10 Jul., 20:38, Martin Albrecht <martinralbre...@googlemail.com> wrote: > Which makes sense because we always return a zero matrix when we allocate in > M4RI, so copy() is alloc + memcpy while just creating it is just an alloc.
How does that work? I learnt the hard way: Allocating memory does not necessarily mean that the memory is initialised by zeroes. Perhaps the other matrix classes can benefit from M4RI's way to create initialised memory? > I guess one approach could be a class attribute which determines whether a > cache should be used or not (i.e. by type). Another one would decide based on > > some dimension (I don't know which since that depends on the implementation > heavily). According to Robert, the fastest way to create an empty matrix depends not only on the class but on the dimensions. My main concern is that doing an elaborate test - repeated each time a zero matrix is created - would considerably slow things down. Therefore, my first suggestion was to introduce a static method of the matrix classes (see post above). But I forgot that the test actually needs to be done only once for each matrix class: It is an ideal candidate for a lazy attribute of MatrixSpace_generic! Hence, we may do something like @lazy_attribute def _copy_zero(self): if self.__is_sparse: return False if self.__matrix_class == sage.matrix.matrix_mod2_dense.Matrix_mod2_dense: return False if self.__matrix_class == sage.matrix.matrix_modn_dense.Matrix_modn_dense: if self._nrows>... and self._ncols>...: return False else: return True ...<do something for matrices over ZZ and so on>... return True def __call__(self,...): ... if entries is None or entries == 0: if self._copy_zero: # faster to copy than to create a new one. return self.zero_matrix().__copy__() else: return self.__matrix_class(self, {}, coerce=coerce, copy=copy) Cheers, Simon -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org