Python如何编写循环生成元素为F[i]-x形式数学函数的数组
实现代码与注意事项
首先你需要规避Python函数的迟绑定特性带来的坑:如果直接在循环里定义lambda x: F[i] - x,所有函数都会读取循环结束后最终的i值,导致所有函数的计算结果都和最后一个元素的规则一致,需要在定义时就把当前F[i]的值绑定到函数的局部变量。
完整实现代码如下:
import numpy as np # 定义原数组 F = np.array([0.00, 1.77*10**7, 1.97*10**7, 1.67*10**7, 0.00]) # 生成函数数组,dtype设为object适配numpy存储函数对象 func_array = np.empty(len(F), dtype=object) for i in range(len(F)): # 通过默认参数绑定当前的F[i]值,避免迟绑定问题 func_array[i] = lambda x, fi=F[i]: fi - x
如果更偏好列表推导的写法,也可以替换循环部分为:
func_list = [lambda x, fi=F[i]: fi - x for i in range(len(F))] # 如需转为numpy数组再加如下代码 func_array = np.array(func_list, dtype=object)
验证测试
你可以用如下代码验证生成的函数是否符合预期:
test_x = 1e7 for idx, func in enumerate(func_array): print(f"索引{idx}的函数计算结果(x={test_x}):{func(test_x)}")
运行后会输出对应F[i] - test_x的结果,和预期规则一致。
内容的提问来源于stack exchange,提问作者mesaoudene kamel
相关产品推荐
相关产品推荐

