Calculating cumulative minimum with numpy arrays

前端 未结 2 1935
日久生厌
日久生厌 2021-02-19 11:31

I\'d like to calculate the \"cumulative minimum\" array--basically, the minimum value of an array up to each index such as:

import numpy as np
nums = np.array([5         


        
2条回答
  •  星月不相逢
    2021-02-19 11:44

    Create a matrix which lower triangle (np.tril) is filled with values of your array nums and your upper triangle (np.triu, with second parameter 1, so the diagonal stays free) is filled with the maximum of the array. (EDIT: instead of the maximum, the first element of the array is the better way. -> comments)

    nums = np.array([5.,3.,4.,2.,1.,1.,2.,0.])
    oneSquare = np.ones((nums.size, nums.size))
    
    A = nums * np.tril(oneSquare)
    B = np.triu(oneSquare, 1) * nums[0]
    A, B
    

    Out:

    (array([[ 5.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
           [ 5.,  3.,  0.,  0.,  0.,  0.,  0.,  0.],
           [ 5.,  3.,  4.,  0.,  0.,  0.,  0.,  0.],
           [ 5.,  3.,  4.,  2.,  0.,  0.,  0.,  0.],
           [ 5.,  3.,  4.,  2.,  1.,  0.,  0.,  0.],
           [ 5.,  3.,  4.,  2.,  1.,  1.,  0.,  0.],
           [ 5.,  3.,  4.,  2.,  1.,  1.,  2.,  0.],
           [ 5.,  3.,  4.,  2.,  1.,  1.,  2.,  0.]]),
     array([[ 0.,  5.,  5.,  5.,  5.,  5.,  5.,  5.],
           [ 0.,  0.,  5.,  5.,  5.,  5.,  5.,  5.],
           [ 0.,  0.,  0.,  5.,  5.,  5.,  5.,  5.],
           [ 0.,  0.,  0.,  0.,  5.,  5.,  5.,  5.],
           [ 0.,  0.,  0.,  0.,  0.,  5.,  5.,  5.],
           [ 0.,  0.,  0.,  0.,  0.,  0.,  5.,  5.],
           [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  5.],
           [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]]))
    

    Now take the minimum of each row:

    (A+B).min(axis=1)
    

    Out:

    array([ 5.,  3.,  3.,  2.,  1.,  1.,  1.,  0.])
    

提交回复
热议问题