pythonnumpymax-pooling

numpy create array of the max of consecutive pairs in another array


I have a numpy array:

A = np.array([8, 2, 33, 4, 3, 6])

What I want is to create another array B where each element is the pairwise max of 2 consecutive pairs in A, so I get:

B = np.array([8, 33, 33, 4, 6])

Any ideas on how to implement?
Any ideas on how to implement this for more then 2 elements? (same thing but for consecutive n elements)

Edit:

The answers gave me a way to solve this question, but for the n-size window case, is there a more efficient way that does not require loops?

Edit2:

Turns out that the question is equivalent for asking how to perform 1d max-pooling of a list with a window of size n. Does anyone know how to implement this efficiently?


Solution

  • A loop-free solution is to use max on the windows created by skimage.util.view_as_windows:

    list(map(max, view_as_windows(A, (2,))))
    
    [8, 33, 33, 4, 6]
    

    Copy/pastable example:

    import numpy as np
    from skimage.util import view_as_windows
    
    A = np.array([8, 2, 33, 4, 3, 6])
    
    list(map(max, view_as_windows(A, (2,))))