es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor exacto en determinante utilizando Numpy

Quiero calcular el determinante de una matriz de 2×2 y uso linalg.det de Numpy de esta manera:

import numpy as np
a = np.array([
[1, 2],
[3, 4]
])
b = np.linalg.det(a)

Por otro lado, sabemos que también podemos calcularlo mediante una multiplicación y una resta de esta manera:

1*4 - 2*3 = -2

Pero cuando establezco b igual a -2:

b == -2

Devuelve falso.

¿Cuál es el problema aquí? ¿Y cómo puedo solucionarlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que el determinante calculado mediante Numpy es un número de punto flotante, mientras que el determinante calculado manualmente mediante multiplicación y resta es un número entero. Debido a las limitaciones de la aritmética de punto flotante, el valor del determinante calculado puede tener un pequeño error que lo hace ligeramente diferente al valor entero exacto.

    Para solucionar esto, puedes redondear el valor del determinante calculado a un número entero o utilizar una división entera en lugar de una división de punto flotante al calcular la multiplicación y la resta. Por ejemplo:

    • Redondear el determinante a un número entero:
    import numpy as np
    
    a = np.array([
        [1, 2],
        [3, 4]
    ])
    
    b = np.round(np.linalg.det(a)).astype(int)
    
    print(b == -2)  # True
    
    • Utilizar división entera:
    a = np.array([
        [1, 2],
        [3, 4]
    ])
    
    b = 1*4 - 2*3
    
    print(b == -2)  # True
    

    De cualquier manera, deberías obtener el resultado correcto que coincide con el determinante calculado manualmente.

Comments are closed.