给定Nx2个N点数组([row,col]):
points = np.array([
[r1, c1],
[r2, c2],
...
])
给定一个2D矩阵,我要对其进行操作:
img = np.arange(400).reshape(20,20)
我正在寻找一种有效的方法来获取img
使用索引的2D切片。
因此,如果我要给定高度h
和宽度的切片w
,则伪代码为:
p_rows = points[:,0]
p_cols = points[:,1]
patches = img[p_rows:p_rows+h, p_cols:p_cols+w]
这样结果将是一个Nxhxw矩阵。但是,可惜,这次广播并没有拯救我。
我已经看了np.r_
,np.select
,np.lib.stride_tricks.as_strided
,np.take
...但没有任何运气呢。
我们可以利用np.lib.stride_tricks.as_strided
基础scikit-image's view_as_windows
来获得滑动窗口。有关使用as_strided
based的更多信息view_as_windows
。然后,使用来自这些索引的高级索引来索引到这些窗口中,points
从而为我们解决了问题!
from skimage.util.shape import view_as_windows
w = view_as_windows(img,(h,w))
out = w[points[:,0],points[:,1]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句