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

使用Numpy计算数组第3列最近2个值的移动最小值

用NumPy实现新增最近2个值最小值的列

假设你的原数组是:

import numpy as np
arr = np.array([[0,4,3,5],[4,4,3,1],[49,1,4,3],[8,4,1,6]])

按照你的需求,我们可以通过以下步骤实现,完全基于NumPy,无需pandas或滚动窗口:

  1. 提取目标列:
    根据你的预期结果,需要计算的是原数组第4列(索引为3,NumPy从0开始计数)的最近2个值的最小值。如果你的目标是其他列,只需要修改索引即可:

    target_col = arr[:, 3]
    
  2. 初始化新增列:
    创建一个和原数组行数相同的数组,初始值填充nan,对应前两行没有足够的历史值:

    new_col = np.full(arr.shape[0], np.nan)
    
  3. 向量化计算最小值:
    利用数组切片,取目标列的前n-2个元素(target_col[:-2])和后移一位的前n-2个元素(target_col[1:-1]),用np.minimum计算对应位置的最小值,赋值给新增列从第3行(索引2)开始的位置:

    new_col[2:] = np.minimum(target_col[:-2], target_col[1:-1])
    
  4. 拼接数组:
    将新增列转为二维数组后,用np.hstack拼接到原数组上:

    new_arr = np.hstack([arr, new_col.reshape(-1, 1)])
    

最终new_arr的结果为:

array([[ 0.,  4.,  3.,  5., nan],
       [ 4.,  4.,  3.,  1., nan],
       [49.,  1.,  4.,  3.,  1.],
       [ 8.,  4.,  1.,  6.,  1.]])

完全符合你预期的新增列结果[nan, nan, 1, 1]。

如果你最初尝试的np.minimum.accumulate是想累积计算,这种切片的方式更直接,因为你只需要固定取前两个历史值的最小值,而不是累积最小值。

内容的提问来源于stack exchange,提问作者bluearmpit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:13:18