我有一个非常大的数组,我想平铺重叠。例如,如果数组看起来像
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
我想把它分成3 x 3个图块,每个图块在每一边与相邻的图块重叠1:
a b c c d e
f g h h i j
k l m m n o
k l m m n o
p q r r s t
u v w w x y
“整形和转置技巧”(在https://www.kaggle.com/c/hubmap-kidney-segmentation/discussion/202171中描述)是一种在Python(和其他语言)中平铺大型数组的方法,允许提取和表示邻接(不重叠)的瓦片 *,而不必复制底层数据数组 *。
我想知道的是如果我们想让瓷砖重叠,可以使用这个技巧吗?如果是,如何进行?
1条答案
按热度按时间7hiiyaii1#
我不认为这可以单独通过整形来完成,但可以使用较低级别的
numpy.lib.stride_tricks.as_strided
函数来完成,仔细设置shape
和strides
参数:第二个数组被分割成重叠的切片,您可以确认这两个数组共享相同的内存:
因此,y是x的新视图。'shape'指定y在每个维度中的形状。在每个维度中,“步幅”指定其元素的起始位置之间的距离,这取决于x的原始内存排列。