【问题标题】:evaluate symbolic expression over meshgrind in python在python中评估meshgrind的符号表达式
【发布时间】:2017-03-31 12:20:45
【问题描述】:

我想通过网格计算符号表达式。我的测试代码如下:

import sympy as sym
import numpy as np

x,y = sym.symbols('x,y')
test = sym.gamma(x)/sym.sqrt(y)

X = np.linspace( start = 1, stop = 2)
Y = np.linspace( start = 4, stop = 7)

X, Y = np.meshgrid(X, Y)

Z = test.evalf(subs = {x : X, y: Y})

似乎python试图创建一个具有许多维度的对象,这完全不是我的想法。有没有办法在不循环函数参数的情况下做到这一点?

最好的

【问题讨论】:

    标签: python eval sympy mesh


    【解决方案1】:

    由于您对数值评估感兴趣,与 numpy/scipy 相比,使用 sympy 并没有为您提供任何优势,后者的功能也可以通过一次调用应用于ndarray 的所有元素。

    from scipy.special import gamma
    from numpy import sqrt
    
    test = lambda x, y: gamma(x)/sqrt(y)
    
    Z = text(X, Y)
    

    【讨论】:

    • 感谢您的回复。这只是一个简单的例子。我想,我需要 sympi 包,因为要评估的表达式相当长并且在评估之前重新排列。使用上面的 lambda 函数确实会产生与以前相同的错误。
    • @Daniel 如果您仅限于 sympy,那么您尝试做的事情毫无意义(对 sympy 而言!),因为 x 被声明为(标量)符号,您尝试替换它带有一个 numpy 矩阵。您必须使用for 循环遍历XY 的每对元素并计算表达式。您可能想尝试的另一种方法是使用 sympy.lambdify 将 sympy 表达式转换为 numpy 表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多