我有一张大图像
我看到了Python / numpy中切片的包装讨论中对
A
和一张小图像B
,它们都表示为2-D的numpy
数组。我想用A
作为画布,在上面写入B
的翻译副本,排列成六边形。我无法理解的部分是如何处理它,使得图像在垂直和水平方向上都能够包裹 - 本质上,我想要的是将(必要时填充)子图块规则地镶嵌到环面上。我看到了Python / numpy中切片的包装讨论中对
numpy.take
和numpy.roll
的讨论,并且那向我展示了如何访问和返回数组的包装切片的副本,但我想要赋值给它 - 即,对于任意的整数rowOffset
和columnOffset
,我想要执行以下操作: A = numpy.zeros((5,11), int)
B = numpy.array([[1,2,3,4,5,6,7]]) * numpy.array([[10,100,1000]]).T
# OK, we wouldn't be able to fit more than one or two copies of B into A, but they demonstrate the wrapped placement problem
wrappedRowIndices = ( numpy.arange(B.shape[0]) + rowOffset ) % A.shape[0]
wrappedColumnIndices = ( numpy.arange(B.shape[1]) + columnOffset ) % A.shape[1]
A[ wrappedRowIndices, : ][ :, wrappedColumnIndices ] = B
我从问题的评论和对numpy
数组表示方式的一瞬间反思中发现,无法以这种方式返回包装的切片作为所需的view
。
是否存在(Y)一种将数组的包装切片分配给这种方式,或者(X)执行我正在尝试实现的镶嵌类型的现有实用程序?
B
不是正方形吗? - maxymooB
的中心将分布在A
上打包六边形的角落,而不是B
本身以某种方式呈六边形。我猜最容易处理的变体是B
的尺寸小于六边形,这样就不会有重叠。 - jezstrides
中的视图,你可以将列和行附加到A
中,然后再进行索引,当然这要考虑内存限制。创建填充版本的方法如下:A1 = np.column_stack((A,A[:,:B.shape[1]-1]))
,A2 = np.row_stack((A1,A1[:B.shape[0]-1]))
。 - Divakar