Hello,
I'm having some trouble with some matrix calculations in SAGE. I'd
like to find the kernel of some matrices, but I think I'm doing
something wrong, because it's very slow.
For example:
sage: M = matrix(RDF, 200,400, lambda i,j: i+j)
sage: %time M.right_kernel()
CPU times: user 379.39 s, sys: 0.55 s, total: 379.94 s
Wall time: 380.66 s
Vector space of degree 400 and dimension 398 over Real Double Field
Basis matrix:
398 x 400 dense matrix over Real Double Field
whereas, say, this small C++ program using the Eigen2 libraries:
#include <Eigen/Eigen>
using namespace Eigen;
int main()
{
MatrixXd m(200,400);
for(int i = 0; i < 200; ++i)
for(int j = 0; j < 400; ++j)
m(i,j) = i+j;
LU<MatrixXd> lu(m);
MatrixXd ker(m.rows(), lu.dimensionOfKernel());
lu.computeKernel(&ker);
return 0;
}
does the following:
time ./matrix
real 0m0.014s
user 0m0.000s
sys 0m0.010s
Is there something I'm missing about how to use the SAGE matrix
classes? Five orders of magnitude faster in C++ seems a bit surprising
to me; perhaps SAGE isn't reaching ATLAS or numpy or whatever it's
supposed to use internally?
Henry de Valence
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org