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

Is it possible to Copy Subregion of One 2D Array to Another Using numpy.ndarray

我有一些使用 numpy 的二维数组,我想将子区域从一个数组复制到另一个数组。例如,如果我开始于:

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,但看不出如何将其作为这项工作的工具。

这两个都可以通过 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.]])