我有一个大图像A
和一个较小的图像B
,它们都表示为二维numpy
数组。我想用A
作为画布,并在上面写下B
的翻译副本,以六边形排列。我无法理解的部分是如何处理它,使图像在垂直和水平两个方向上都能包裹,基本上我想要的是将一个(必要时加上填充)子图像的规则细分到一个圆环上。在
我看过numpy.take
和{rowOffset
和{
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
我从评论中看到on the question,
从对numpy
数组表示方式的反思来看,包装好的切片不可能以这种方式返回为view
。在
是否有(Y)一种以这种方式分配给数组的封装切片的方法,或者(X)一种用于执行我试图实现的细分的现有工具?在
这是一个函数,它根据hpaulj的答案来解决我的问题Y。然而,这可能不是求解X的最有效方法,因为在
numpy.roll
中完成了所有繁重的工作。在Eric纠正的方法也起了作用,我认为它必须更高效,因为它不必复制任何数据:
^{pr2}$np.put
是1d等价于np.take
:它的文档建议}(和
np.place
和{np.copyto
)。我没有用过那么多,但是可以构造一个掩码,并重新排列B
来完成复制。在==============
下面是一个关于
^{pr2}$place
的实验:所以我有
mask
和A
相同的大小,有一个B
大小的孔。在我可以滚动}以
mask
和B
,以及{wrapped
的方式滚动A
中的值。在还有2d卷
当前代码分为
__getitem__
和__setitem__
。如您所述,__getitem__
不返回视图,因此__setitem__
只是修改了副本。在您需要在一个
__setitem__
(即一组括号)中完成整个操作:由于广播,这相当于:
^{pr2}$使用多个数组编制索引时,规则如下:
实际上有一个内置项,^{} :
概括到ND,您可以得到:
相关问题 更多 >
编程相关推荐