Flo Cp
Flo Cp

Reputation: 341

How to solve symbolic equations on numpy arrays?

I try to solve an equation with solve from Sympy. But my approach doesn't work as desired.

My equation : 0.00622765954483725 = (x * 24.39 * 0.921107170819325) / 143860432.178345.

My code :

from sympy import symbols, solve
import numpy as np 
x = symbols('x')
sol = solve((np.array([[x],[x]])  * np.array([[24.39],[293.6]]) * np.array([[0.921107170819325],[1]])) / np.array([[143860432.178345],[143860432.178345]]) - np.array([[0.00622765954483725],[0.0089267519953503]]))

I had success with a linear expression, but I have a DataFrame and I want to solve all data at the same time.

from sympy import symbols, solve
x = symbols('x')
sol = solve((x * 24.39 * 0.921107170819325) / 143860432.178345 - 0.00622765954483725)

Upvotes: 5

Views: 3697

Answers (1)

JohanC
JohanC

Reputation: 80279

Numpy doesn't understand about sympy's symbols, nor does sympy understand about numpy arrays. The only way to make them work together, is with sympy's lambdify which can convert a symbolic sympy expression to a numpy function. In your case, you first need to create a symbolic solution, lambdify it, and call it on your arrays:

from sympy import symbols, solve, Eq, lambdify

a, b, c, d = symbols('a b c d', real=True)
x = symbols('x')
sol = solve(Eq(x * a * b / c, d), x) # solve returns a list of solutions, in this case a list with just one element

np_sol = lambdify((a, b, c, d), sol[0]) # convert the first solution to a (numpy) function

# everything before is only sympy, everything from here is only numpy

import numpy as np  

a_np = np.array([[24.39], [293.6]])
b_np = np.array([[0.921107170819325], [1]])
c_np = np.array([[143860432.178345], [143860432.178345]])
d_np = np.array([[0.00622765954483725], [0.0089267519953503]])

np_sol(a_np, b_np, c_np, d_np)

Result:

array([[39879.],
       [ 4374.]])

Upvotes: 4

Related Questions