我在SymPy中编写了一个表达式f,如代码所示,然后使用lambdify
将其转换为一个函数。然后,我使用np.vectorize(f)
对其进行矢量化,以便能够将其应用于numpy数组
import numpy as np
from math import exp
a = Symbol('a')
x = Symbol('x')
b = Symbol('b')
c = Symbol('c')
from sympy import *
f = exp(-(a+b+c)*x)*(4+exp(-(a+b)*x) -2*exp(-a*x) - 2*exp(-c*x))
f = lambdify([x,(a,b,c)], f)
vff = np.vectorize(f)
t = np.arange(0, 5, 0.01, dtype=np.float64)
y = vff(t, (1,1,1)) # (1,1,1) stands for (a,b,c)
但在执行此操作时,最后一行抛出以下错误
TypeError: _lambdifygenerated() missing 1 required positional argument: '_Dummy_191'
.
我认为语法可能是错误的。我在网上搜索,但找不到正确的语法。谁能告诉我正确的语法吗
导入的模块:
f
可以通过以下方式运行:由于
f
使用数组输入,我认为您不需要vectorized
表单如果我用一个参数调用
vff
,我会得到您的错误:对于2个参数,我得到一个不同的错误:
这是因为
vectorize
将标量1
作为第二个参数传递vectorize
将标量元组传递给函数,而不是数组。它是从接受标量参数的函数设计的,而不是数组甚至元组。有一些方法可以解决这个问题,但请记住vectorize
是而不是一种速度工具由于您不希望
vectorize
迭代(a,b,c)参数,我们可以“排除”它:这与上面的
f
的工作原理相同。但速度要慢得多:vectorize
比列表理解更慢:相关问题 更多 >
编程相关推荐