Le 13/05/2014 11:56, Albert van der Horst a écrit :
In article <mailman.9917.1399914607.18130.python-l...@python.org>,
Joseph Martinot-Lagarde  <joseph.martinot-laga...@m4x.org> wrote:
Le 10/05/2014 17:24, Albert van der Horst a écrit :
I have the following code for calculating the determinant of
a matrix. It works inasfar that it gives the same result as an
octave program on a same matrix.

/ ----------------------------------------------------------------

def determinant( mat ):
..
      result = lastr[jx]
      assert(result<>0.)
...
          assert(result<>0.)
          nom *= result   # Compenstate for multiplying a row.
...
      assert(nom<>0.)
..

/-----------------------------------------

Now on some matrices the assert triggers, meaning that nom is zero.
How can that ever happen? mon start out as 1. and gets multiplied
with a number that is asserted to be not zero.

Any hints appreciated.

Groetjes Albert

I know it's not the question, but if you want a replacement for octave
did you try numpy (and scipy) ? The determinant would be computer faster
and with less memory than with your function.

I'm using several programming languages in a mix to solve Euler problems.
This is about learning how octave compares to python for a certain kind of
problem as anything.
The determinant program I had lying around, but it was infinite precision
with integer only arithmetic. Then I made a simple modification and got
mad because I didn't understand why it didn't work.

I have used numpy and its det before, but I find it difficult to
remember how to create a matrix in numpy. This is the kind of thing
that is hard to find in the docs. Now I looked it up in my old
programs: you start a matrix with the zeroes() function.

I expect the built in determinant of octave to be on a par with corresponding
python libraries.


---

Groetjes Albert



You can use numpy.zeros(), but you can also use the same list of lists that you use for your problem.

Transform a list of lists into a numpy array:
>>> np.asarray([[1, 2],[3, 4]])
array([[1, 2],
       [3, 4]])

Use a numpy function directly on a list of lists (works for must numpy functions):
>>> np.linalg.det([[1, 2],[3, 4]])
-2.0000000000000004

More info on array creation: http://wiki.scipy.org/Tentative_NumPy_Tutorial#head-d3f8e5fe9b903f3c3b2a5c0dfceb60d71602cf93

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce 
que la protection avast! Antivirus est active.
http://www.avast.com


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to