FriskyGrub - 8 months ago 59

Python 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]`

`a1 = array1[cpix[1]-50:cpix[1]+50, cpix[0]-50:cpix[0]+50]`

a2 = array2[cpix[1]-50:cpix[1]+50, cpix[0]-50:cpix[0]+50]

a3 = array3[cpix[1]-50:cpix[1]+50, cpix[0]-50:cpix[0]+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?

Answer

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.