Можно ли скопировать субрегион одного 2D-массива в другой, используя numpy.ndarray - PullRequest
0 голосов
/ 05 июня 2018

У меня есть несколько двумерных массивов, использующих 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, но не мог понять, как сделать это инструментом для этой работы.

1 Ответ

0 голосов
/ 05 июня 2018

И то, и другое можно выполнить с помощью индексации numpy.Чтобы понять, как это работает, документация всегда является вашим другом .

Ваш первый случай:

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.]])
...