You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:50:12