Saltar al contenido

¿Cuál es la mejor manera de convertir una matriz SymPy en una matriz numpy? array/matriz

Después de consultar con especialistas en este tema, programadores de diversas áreas y maestros dimos con la solución al problema y la compartimos en este post.

Solución:

Esto parece lo más sencillo:

np.array(g).astype(np.float64)

Si omite el método astype, numpy creará una matriz de tipo ‘objeto’, que no funcionará con common array operaciones.

Esta respuesta se basa en los consejos de Krastanov y asmeurer. Este pequeño fragmento usa sympy.lambdify:

from sympy import lambdify
from sympy.abc import x, y

g = sympy.Matrix([[   x,  2*x,  3*x,  4*x,  5*x,  6*x,  7*x,  8*x,   9*x,  10*x],
                  [y**2, y**3, y**4, y**5, y**6, y**7, y**8, y**9, y**10, y**11]])
s = (x, y)
g_func = lambdify(s, g, modules='numpy')

donde g es su expresión que contiene todos los símbolos agrupados en s.

Si modules='numpy' se utiliza la salida de la función g_func será un np.ndarray objeto:

g_func(2, 3)
#array([[     2,      4,      6,      8,     10,     12,     14,     16,       18,     20],
#       [     9,     27,     81,    243,    729,   2187,   6561,  19683,    59049, 177147]])

g_func(2, y)
#array([[2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
#       [y**2, y**3, y**4, y**5, y**6, y**7, y**8, y**9, y**10, y**11]], dtype=object)

Si modules='sympy' la salida es un sympy.Matrix objeto.

g_func = lambdify(vars, g, modules='sympy')
g_func(2, 3)
#Matrix([[2,  4,  6,   8,  10,   12,   14,    16,    18,     20],
#        [9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147]])

g_func(2, y)
#Matrix([[   2,    4,    6,    8,   10,   12,   14,   16,    18,    20],
#        [y**2, y**3, y**4, y**5, y**6, y**7, y**8, y**9, y**10, y**11]])

 numpy.array(SympyMatrix.tolist()).astype(numpy.float64)

El nativo tolist método para convertir la matriz sympy en algo indexado anidadamente

numpy.array puede convertir algo indexado anidadamente en matrices

.astype(float64) emitirá números de la array en el tipo flotante numpy predeterminado, que funcionará con funciones arbitrarias de manipulación de matrices numpy.

Como nota adicional, vale la pena mencionar que al convertir a numpy pierde la capacidad de realizar operaciones matriciales mientras mantiene variables y expresiones simpy durante el viaje.

EDITAR: El punto de mi nota adicional es que al lanzar a numpy.array, pierde la capacidad de tener una variable en cualquier lugar de su matriz. Todos los elementos de su matriz deben ser números antes de lanzar o todo se romperá.

Reseñas y puntuaciones

Si posees alguna desconfianza y disposición de aclararse nuestro ensayo puedes escribir una ilustración y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *