chronaxis.core.mean_weights_numpy
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""以独立NumPy运算执行均值权重归一化,不调用标量数值核。"""23import numpy as np4from .types import QualityFlag as Q567def normalized_mean_terms(values, weights, denominator):8 """对有限数值列先除整窗正分母再乘值,返回只读项和质量。910 参数: 同形一维有效值/权重数组及已核实正分母。返回: (ndarray, QualityFlag)。11 异常: 结构或分配错误传播;非有限和非零下溢记质量,不修补结果。12 """13 try:14 if values.ndim != 1 or weights.shape != values.shape or not np.isfinite(denominator) or denominator <= 0:15 raise ValueError('均值需要同形一维输入和有限正分母')16 if np.any(~np.isfinite(values)) or np.any(~np.isfinite(weights)) or np.any(weights <= 0):17 raise ValueError('均值回读需要有限数值和正权重')18 with np.errstate(over='ignore', under='ignore', invalid='ignore'):19 terms = np.multiply(values, weights / denominator)20 quality = Q.NONE21 if np.any(~np.isfinite(terms)):22 quality |= Q.NONFINITE23 if np.any((terms == 0) & (values != 0)):24 quality |= Q.PRECISION_LOSS25 terms.setflags(write=False)26 return terms, quality27 finally:28 # 保留原异常,断开本帧借用列,避免调用方保存traceback时延长其生命周期。29 values = weights = terms = None30