Python 使用开始-停止索引向量切片二维numpy阵列

Python 使用开始-停止索引向量切片二维numpy阵列,python,arrays,numpy,vectorization,slice,Python,Arrays,Numpy,Vectorization,Slice,第一个帖子在这里,所以请对我放轻松。:) 我想对以下内容进行矢量化: rowStart=array of length N rowStop=rowStart+4 colStart=array of length N colStop=colStart+4 x=np.random.rand(512,512) #dummy test array output=np.zeros([N,4,4]) for i in range(N): out

第一个帖子在这里,所以请对我放轻松。:)

我想对以下内容进行矢量化:

rowStart=array of length N        
rowStop=rowStart+4        
colStart=array of length N    
colStop=colStart+4    

x=np.random.rand(512,512) #dummy test array   

output=np.zeros([N,4,4])
for i in range(N):
   output[i,:,:]=x[ rowStart[i]:rowStop[i], colStart[i]:colStop[i] ]
我希望能够做到的是:

output=x[rowStart:rowStop, colStart:colStop ]
其中numpy识别出切片索引是向量,并广播切片。我知道这可能不起作用,因为虽然我知道我的切片输出总是相同的大小,但numpy不起作用

我研究了各种方法,包括“高级”或“高级”索引(这似乎适用于索引,而不是切片),使用网格网格的大规模布尔索引(从内存的角度来看不实用,因为我的N可以达到50k-100k),以及,这似乎是另一种进行高级/高级索引的方法

如果我能得到一个如下数组,我可以看到我如何可能使用花式/高级索引:

[np.arange(rowStart[0],rowStop[0]),
 np.arange(rowStart[1],rowStop[1]), 
...,  
np.arange(rowStart[N],rowStop[N])]
列也有类似的方法,但我也很难找到一种矢量化的方法来创建它

如果您能提供任何建议,我将不胜感激。 谢谢

我们可以利用based获得滑动窗口,从而解决我们的问题


谢谢你,迪瓦卡。我去看看那个图书馆@CalvintDog查看链接帖子,了解更多详细信息,这些信息还建议如果您没有软件包或无法安装,如何将
view_as_windows
的源代码作为独立的源代码。我可能必须深入研究源代码,不是因为我无法安装软件包,而是因为我的RowStart,ColStart不仅仅是np.arange(0,x.shape[0],stride)类型。相反,它们是在极坐标中确定的。我将查看源代码,看看是否可以提供任意的芯片起始位置。
from skimage.util.shape import view_as_windows

BSZ = (4, 4) # block size
w = view_as_windows(x, BSZ)
out = w[rowStart, colStart]