我试图找到一个简洁的解决方案,但是我以相同的方式切割了几个相同形状的2D阵列。我通过定义一个包含' x,y'的列表,尽可能地整理它。中心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]
只是有预定义的东西(比如可能是面具?)所以我可以做一个
a1 = array1[predefined_2dslice]
a2 = array2[predefined_2dslice]
a3 = array3[predefined_2dslice]
这是numpy支持的东西吗?
答案 0 :(得分:12)
是的,您可以使用numpy.s_
:
示例:
>>> a = np.arange(10).reshape(2, 5)
>>>
>>> m = np.s_[0:2, 3:4]
>>>
>>> a[m]
array([[3],
[8]])
在这种情况下:
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]
您还可以使用numpy.r_
将切片对象转换为沿第一轴的连接。
答案 1 :(得分:0)
您可以使用slice
个对象的元组为多维数组建立索引。
window = slice(col_start, col_stop), slice(row_start, row_stop)
a1 = array1[window]
a2 = array2[window]
这不特定于numpy
,而仅仅是订阅/切片语法在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))