使用索引数组对多个二维范围进行Numpy切片
给定N个点([行,列])的Nx2数组:使用索引数组对多个二维范围进行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矩阵。但是,唉,这
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-。