使用索引数组对多个二维范围进行Numpy切片

使用索引数组对多个二维范围进行Numpy切片,numpy,Numpy,给定N个点([行,列])的Nx2数组: points=np.array([ [r1,c1], [r2,c2], ... ]) 给定一个我想操作的2D矩阵: img=np.arange(400).重塑(20,20) 我正在寻找一种有效的方法,使用索引获取img的2D切片 因此,如果我想要一个给定高度h和宽度w的切片,伪代码应该是: p_行=点[:,0] p_cols=点[:,1] patches=img[p_行:p_行+h,p_列:p_列+w] 这样的结果将是一个Nxhxw矩阵。但是,唉,这

给定N个点([行,列])的Nx2数组:

points=np.array([
[r1,c1],
[r2,c2],
...
])
给定一个我想操作的2D矩阵:

img=np.arange(400).重塑(20,20)
我正在寻找一种有效的方法,使用索引获取
img
的2D切片

因此,如果我想要一个给定高度
h
和宽度
w
的切片,伪代码应该是:

p_行=点[:,0]
p_cols=点[:,1]
patches=img[p_行:p_行+h,p_列:p_列+w]
这样的结果将是一个Nxhxw矩阵。但是,唉,这次广播并没有救我

我已经研究了
np.r
np.select
np.lib.stride\u技巧。随着{u stride
np.take
。。。但是还没有任何运气。

我们可以利用based来获得滑动窗口。然后,使用
中的索引,使用高级索引将这些窗口编入索引,我们就可以解决这个问题了

from skimage.util.shape import view_as_windows

w = view_as_windows(img,(h,w))
out = w[points[:,0],points[:,1]]

我不能在这个项目上使用scikit,但我会在项目进展过程中查看实现,以便更好地理解。谢谢@常见问题解答如其他链接问答中所述,您可以简单地将源代码作为独立代码使用,而无需安装scikit image-。