基于对应价格对两组NumPy键值数组对的值求和的最优实现方法
两组有序价格键值数组按对应键求和的最优实现方案
以下方案均基于你给出的前置条件:第二组的所有键都存在于第一组中,第一组键为固定步长0.25的有序升序序列,无需处理额外异常场景。
前置示例输入
import numpy as np import pandas as pd keys1 = np.array([1.0, 1.25, 1.5, 1.75]) vals1 = np.array([1, 1, 1, 1]) keys2 = np.array([1.25, 1.5]) vals2 = np.array([1, 1])
方案1:固定步长场景最优(纯Numpy实现)
性能最高,无额外遍历开销,直接通过步长计算对应索引:
step = 0.25 # 计算keys2在keys1中的对应索引 idx = ((keys2 - keys1[0]) / step).astype(int) # 直接叠加对应位置的值 vals1[idx] += vals2 print(tuple(vals1)) # 输出 (1, 2, 2, 1)
方案2:通用有序键场景(纯Numpy实现)
不依赖固定步长,只要第一组键为升序排列即可使用:
# 查找keys2在keys1中的对应位置 idx = np.searchsorted(keys1, keys2) vals1[idx] += vals2 print(tuple(vals1)) # 输出 (1, 2, 2, 1)
方案3:Pandas原生实现
如果你原本就在用DataFrame处理数据,直接用索引对齐特性,代码最简洁:
s1 = pd.Series(vals1, index=keys1) s2 = pd.Series(vals2, index=keys2) # 按索引自动对齐相加,不存在的键填充0 res = tuple(s1.add(s2, fill_value=0).astype(int).tolist()) print(res) # 输出 (1, 2, 2, 1)
内容的提问来源于stack exchange,提问作者Coder1
相关产品推荐
相关产品推荐

