Python使用迭代公式计算函数所有可能取值的实现咨询
实现方案
你原有代码存在两个核心问题:
- 直接调用
arange需要先导入numpy库,且math.sqrt仅支持单值计算,不支持直接传入数组运算 - 直接写
k/m只会对两个序列的同位置元素做计算,不会生成所有m、k组合的结果
方案1:双层for循环实现(最易理解的循环写法)
import math import numpy as np # 生成m和k的取值序列 m_list = np.arange(200, 1200, 0.1) k_list = np.arange(1, 7, 0.1) w_list = [] # 遍历所有m的取值 for m in m_list: # 对每个m,遍历所有k的取值 for k in k_list: w = math.sqrt(k / m) w_list.append(w)
最终得到的w_list就是所有组合对应的w值,顺序为每个m值对应遍历完所有k值后,再切换下一个m值。
方案2:列表推导式写法(更简洁的循环实现)
如果追求代码简洁,可以把双层循环写成列表推导式,运行效果和上面完全一致:
import math import numpy as np m_list = np.arange(200, 1200, 0.1) k_list = np.arange(1, 7, 0.1) w_list = [math.sqrt(k/m) for m in m_list for k in k_list]
补充优化方案
如果你的数据量很大,不强制要求用循环的话,用numpy向量化运算速度会快数十倍,写法如下:
import numpy as np m = np.arange(200, 1200, 0.1) k = np.arange(1, 7, 0.1) # 利用广播机制生成所有组合的k/m结果,再开平方 k_2d, m_2d = np.meshgrid(k, m) w_arr = np.sqrt(k_2d / m_2d) # 如果需要转成一维列表可以加 .flatten().tolist() w_list = w_arr.flatten().tolist()
内容的提问来源于stack exchange,提问作者Felix Spiers
相关产品推荐
相关产品推荐

