def eval_expression(expr, values=None):
"""
Evaluate a symbolic expression and returns a numerical array.
:param expr: A symbolic expression to evaluate, in the form of a N_terms * N_Vars matrix
:param values: None, or a dictionary of variable:value pairs, to substitute in the symbolic expression.
:return: An evaled expression, in the form of an N_terms array.
"""
n_coeffs = expr.shape[0]
evaled_expr = np.zeros(n_coeffs)
for (i, term) in enumerate(expr):
if values:
evaled_term = np.array([values.get(elem, 0) if isinstance(elem, str) else elem for elem in term])
else:
evaled_term = np.array(
[0 if isinstance(elem, str) else elem for elem in term]) # All variables at 0
evaled_expr[i] = np.product(evaled_term.astype(float)) # Gradient is the product of values
return evaled_expr
评论列表
文章目录