我有一些使用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
,但看不出如何将这个工具作为这项工作。
答案 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.]])