如何仅用Numpy实现带累加器叠加的动态最小值计算?
仅用Numpy实现动态最小值计算
当然可以用纯Numpy实现这个逻辑,你的计算逻辑是递推式依赖前一步结果(每一步的累加器值取决于上一步的输出),以下是两种具体实现方案:
方案1:显式循环实现
这是最直观的方式,逐个迭代数组元素并更新累加器,将结果存入Numpy数组:
import numpy as np a = np.array([3, 5, 7, 13, 18]) b = np.array([2, 1, 2, 2, 5]) # 初始化结果数组,与a同类型同形状 result = np.empty_like(a) acc = 0 # 初始累加器值 for i in range(a.size): acc = min(a[i], acc + b[i]) result[i] = acc print(result) # 输出:array([ 2, 3, 5, 7, 12])
方案2:结合np.fromiter与生成器
如果想避免显式索引循环,可以用生成器封装递推逻辑,再通过np.fromiter直接生成Numpy数组:
import numpy as np a = np.array([3, 5, 7, 13, 18]) b = np.array([2, 1, 2, 2, 5]) def running_min_generator(arr_a, arr_b, initial=0): acc = initial for ai, bi in zip(arr_a, arr_b): acc = min(ai, acc + bi) yield acc # 从生成器创建Numpy数组 result = np.fromiter(running_min_generator(a, b), dtype=a.dtype) print(result) # 输出:array([ 2, 3, 5, 7, 12])
说明
由于你的计算逻辑是状态依赖型(每一步的输出作为下一步的输入),无法通过纯向量化的Numpy操作(如cumsum这类无状态累加)实现。上述两种方案均为纯Numpy环境下的实现,无需依赖itertools库。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

