# How can I create a slice object for Numpy array?

## Question:

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 containing the ‘x,y’ center e.g. `cpix = [161, 134]` What I’d like to do is instead of having to write out the slice three times like so:

``````a1 = array1[cpix-50:cpix+50, cpix-50:cpix+50]
a2 = array2[cpix-50:cpix+50, cpix-50:cpix+50]
a3 = array3[cpix-50:cpix+50, cpix-50:cpix+50]
``````

is just have something predefined (like maybe a mask?) so I can just do a

``````a1 = array1[predefined_2dslice]
a2 = array2[predefined_2dslice]
a3 = array3[predefined_2dslice]
``````

Is this something that numpy supports?

Yes you can use `numpy.s_`:

Example:

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

And in this case:

``````my_slice = np.s_[cpix-50:cpix+50, cpix-50:cpix+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.

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))
``````
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.