我正在尝试用 sp.Max(x, 0) 内部的大分析表达式进行lambdify。我想使用 numpy 来向量化我的计算,所以 x 将是一个数组。我需要 x 和 0 的元素最大值。不过,默认情况下,sympy 将 sp.Max 更改为 np.amax。它沿着轴找到最大值,这不是我需要的。lambdify 中的“modules”关键字不像我预期的那样工作。我试过了:
import numpy as np
import sympy as sp
arr = np.array([1, 2, 3])
expr = sp.sin(x) + sp.Max(x, 0)
f = sp.lambdify(x, expr, modules=[{'Max': np.maximum}, 'numpy']) # docs say, priority of modules matters
help(f)
它给:
Help on function _lambdifygenerated:
_lambdifygenerated(x)
Created with lambdify. Signature:
func(x)
Expression:
sin(x) + Max(0, x)
Source code:
def _lambdifygenerated(x):
return (sin(x) + amax((0,x)))
Imported modules:
sp.Max 出于某种原因更改为 amax。
如果 'numpy' 未包含在 'modules' 列表中,它会简单地跳过所有其他功能。我也尝试在列表中交换 dict 和 'numpy',但没有帮助。请澄清一下,怎么了?这是同情的错误吗?