My advice is to fully test the algorithm in Python before translating it into any other language (otherwise you run the risk of optimizing a prematurely bad algorithm). Once you have clearly defined the best interface for your problems, you can define its external code.
Let me explain.
Suppose your final algorithm is to take a bunch of numbers in a format (row, column, value) and, say, calculate the SVD of the corresponding sparse matrix. Then you can leave the whole interface for Python:
class Problem(object): def __init__(self, values): self.values = values def solve(self): return external_svd(self.values)
where external_svd is the Python shell for the Fortran / C / C ++ routine that efficiently calculates svd, given the matrix in the format (row, column, value) or any other that floats on your boat.
Again, try using numpy and scipy , as well as any other standard Python tool. Only after you have profiled your code do you have to write the actual external_svd shell.
If you go through this route, you will have a module that is user-friendly (the user interacts with Python, not Fotran / C / C ++) and, most importantly, you can use different ends: external_svd_lapack , external_svd_paradiso , external_svd_gsl , etc. .d. (one for each circuit you select).
For rare linear algebra libraries, check out Intel Math Kernel Library , Rare PARADISO Solver , Harwell Subroutine Library (HSL) called "MA27". I have successfully used them to solve very rare and very big problems (check the IPOPT nonlinear optimization solution page to see what I mean)