我有一个这样的函数:
def signal_prototype(t, A, f, p):
return A*np.sin(2*np.pi*f*t+p)
字符串
我想把它矢量化,这样我就可以像下面这样使用函数了。
signal_A = SOME_VECTORIZE_FUNCTION(signal_prototype, t=t, A=1, f=10000, p=0)
signal_B = SOME_VECTORIZE_FUNCTION(signal_prototype, t=t, A=1, f=10000, p=np.pi/4)
signal_C = SOME_VECTORIZE_FUNCTION(signal_prototype, t=t, A=1, f=10000, p=np.pi/2)
signal_D = SOME_VECTORIZE_FUNCTION(signal_prototype, t=t, A=1, f=10000, p=3*np.pi/4)
t = np.linspace(0,1e-3,100000)
X1 = signal_A(t)
X2 = signal_B(t)
X3 = signal_C(t)
X4 = signal_D(t)
型
谢谢你,谢谢
我试着使用np.vectorize
并阅读文档。似乎没有任何方法可以发送静态参数来进行矢量化。
然而,vectorize可能不是最好的工具。
我有一组复杂的微分方程,这些信号是它们的输入,所以我需要f(t,x)形式的函数。
新的信号函数是随着模型中条件的变化而动态创建的。因此,创建每个方程的静态版本并不是一个好的选择。
2条答案
按热度按时间xnifntxz1#
np.sin()
已经矢量化,因为它将在数组上工作字符串
您可以直接调用函数
型
如果您想为每个函数创建一个函数,可以按照建议使用
lambda
或functools.partial
型
或者自己返回部分函数(实际上与
lambda
相同)型
如果你想传递一个默认的
t
或者使它成为可选的,你可以扩展它,虽然我不建议这样做,只是让它来说明这是多么强大,因为它永远不建议返回不同类型的东西(比如imo一个参数数量可变的函数)不要这样做
的字符串
ttisahbt2#
上面的答案确实帮助我弄清楚了我需要做什么。
字符串
现在我有了可以这样调用的函数。
型