使用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或滚动窗口:
提取目标列:
根据你的预期结果,需要计算的是原数组第4列(索引为3,NumPy从0开始计数)的最近2个值的最小值。如果你的目标是其他列,只需要修改索引即可:target_col = arr[:, 3]初始化新增列:
创建一个和原数组行数相同的数组,初始值填充nan,对应前两行没有足够的历史值:new_col = np.full(arr.shape[0], np.nan)向量化计算最小值:
利用数组切片,取目标列的前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])拼接数组:
将新增列转为二维数组后,用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
相关产品推荐
相关产品推荐

