Python中多个列表推导式能否合并以简化权重计算?
代码优化方案
你原有代码的逻辑可以通过合并中间推导、数学公式化简、NumPy向量化三种方式优化,以下是具体实现:
方案1:合并列表推导(保持原生列表逻辑)
可以通过代入中间变量的计算逻辑,省略不必要的中间列表存储,把4次列表推导压缩为2次,逻辑和原代码完全等价:
def get_weights(Last_scan, Peak_shot): # 合并前三步的计算逻辑,直接生成Is列表 Is = [Peak_shot / np.sqrt(x * Peak_shot) for x in Last_scan.values()] sum_Is = sum(Is) return [i / sum_Is for i in Is]
你也可以通过数学公式进一步化简计算逻辑:Peak_shot / np.sqrt(x * Peak_shot) 等价于 np.sqrt(Peak_shot / x),化简后可以减少一次乘法运算,计算效率更高。
方案2:NumPy向量化实现(推荐,性能更优)
既然你已经用到了NumPy的sqrt方法,完全可以用向量化运算替代Python层的列表循环,写法更短,且数据量越大性能优势越明显:
import numpy as np def get_weights(Last_scan, Peak_shot): arr = np.array(list(Last_scan.values())) Is = np.sqrt(Peak_shot / arr) return (Is / Is.sum()).tolist()
如果你的调用方可以直接接收NumPy数组作为返回值,省略.tolist()调用即可,代码会更简洁。
内容的提问来源于stack exchange,提问作者ZR-
相关产品推荐
相关产品推荐

