是否可以使用numpy.ndarray将一个2D数组的子区域复制到另一个

时间:2018-06-05 20:04:38

标签: python python-3.x numpy numpy-ndarray

我有一些使用numpy的2d数组,我想将子区域从一个复制到另一个。例如,如果我从:

开始
dest = numpy.zeros((4, 4))
# array([[0., 0., 0., 0.],
#   [0., 0., 0., 0.],
#   [0., 0., 0., 0.],
#   [0., 0., 0., 0.]])
src = numpy.ones((4, 4))
# array([[1., 1., 1., 1.],
#   [1., 1., 1., 1.],
#   [1., 1., 1., 1.],
#   [1., 1., 1., 1.]])

我想以某种方式说src应该在dest复制到(2,1),这样来源就像:

 array([[0., 0., 0., 0.],
   [0., 0., 1., 1.],
   [0., 0., 1., 1.],
   [0., 0., 1., 1.]])

或者(-3, 0),然后:

 array([[1., 0., 0., 0.],
   [1., 0., 0., 0.],
   [1., 0., 0., 0.],
   [1., 0., 0., 0.]])

我可以做一个很好的老式双索引循环来做到这一点,但我希望numpy有一些聪明的魔法做到了。我看了take,但看不出如何将这个工具作为这项工作。

1 个答案:

答案 0 :(得分:2)

这两项都可以通过numpy索引来完成。要了解其工作原理,请documentation is always your friend

你的第一个案例:

dest[1: ,2:] = src[1: ,2:]

array([[0., 0., 0., 0.],
   [0., 0., 1., 1.],
   [0., 0., 1., 1.],
   [0., 0., 1., 1.]])

你的第二个案例:(你指的是第-3栏,但你的结果表明-4)

dest[:, -4] = src[:, -4]

array([[1., 0., 0., 0.],
   [1., 0., 0., 0.],
   [1., 0., 0., 0.],
   [1., 0., 0., 0.]])