How can I create a slice object for Numpy array?

后端 未结 2 1993
梦毁少年i
梦毁少年i 2021-01-07 19:30

I\'ve tried to find a neat solution to this, but I\'m slicing several 2D arrays of the same shape in the same manner. I\'ve tidied it up as much as I can by defining a list

相关标签:
2条回答
  • 2021-01-07 20:13

    You can index a multidimensional array by using a tuple of slice objects.

    window = slice(col_start, col_stop), slice(row_start, row_stop)
    a1 = array1[window]
    a2 = array2[window] 
    

    This is not specific to numpy and is simply how subscription/slicing syntax works in python.

    class mock_array:
        def __getitem__(self, key):
            print(key)
    m = mock_array()
    m[1:3, 7:9] # prints tuple(slice(1, 3, None), slice(7, 9, None))
    
    0 讨论(0)
  • Yes you can use numpy.s_:

    Example:

    >>> a = np.arange(10).reshape(2, 5)
    >>> 
    >>> m = np.s_[0:2, 3:4]
    >>> 
    >>> a[m]
    array([[3],
           [8]])
    

    And in this case:

    my_slice = np.s_[cpix[1]-50:cpix[1]+50, cpix[0]-50:cpix[0]+50]
    
    a1 = array1[my_slice] 
    a2 = array2[my_slice] 
    a3 = array3[my_slice]
    

    You can also use numpy.r_ in order to translates slice objects to concatenation along the first axis.

    0 讨论(0)
提交回复
热议问题