gpt4 book ai didi

python - 从函数返回表达式总和的pythonic方式是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:53 25 4
gpt4 key购买 nike

我有一个函数 F,定义为:

def F(x, A_0, A_1, phi_1, freq):
return (A_0 + A_1 * np.sin(2 * np.pi * 1 * freq * x + phi_1))

有时我希望它扩展成这种形式:

def F(x, A_0, A_1, phi_1, A_2, phi_2, freq):
return (A_0 + A_1 * np.sin(2 * np.pi * 1 * freq * x + phi_1)
+ A_2 * np.sin(2 * np.pi * 2 * freq * x + phi_2))

我希望能够将函数扩展到任意多个 sin 项。从数学上讲,我希望函数返回:

enter image description here

执行此操作的 pythonic 方法是什么?

我的做法:

def F(x, A_0, As, phis, freq):
terms=[]
for i, A_i in enumerate(As):
terms.append(A_i*np.sin(2*np.pi*i*freq * x +phis[i]))
return A_0 + sum(terms)

如何做得更好?

最佳答案

您可以使用生成器表达式并避免创建中间列表:

def F(x, A_0, As, phis, freq):
terms = (A_i*np.sin(2*np.pi*i*freq * x +phis[i]) for i, A_i in enumerate(As))
return A_0 + sum(terms)

使用 NumPy 一个更好的主意是向量化你的逻辑:

def F(x, A_0, As, phis, freq):
idx = np.arange(len(As))
terms = As * np.sin(2 * np.pi * idx * freq * x + phis)
return A_0 + terms.sum()

要了解其工作原理,请注意 np.sin应用于数组返回相同形状的数组,其中 np.sin应用于每个值。

如@Oleg 的评论所述,您可能需要 np.arange(1, len(A_i)+1)确保您的枚举从 1 开始.

关于python - 从函数返回表达式总和的pythonic方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54514886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com