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.