Аддитивное присвоение двухмерного массива на основе индекса кортежа - PullRequest
3 голосов
/ 12 июня 2019

Если у нас есть двумерный массив, например 100x100, и мы хотим добавить к нему значения на основе их координат, как мы можем избежать перезаписи значения предыдущего значения координаты?

import numpy as np

vm_map = np.zeros((100,100))
a = np.array([[0,1], [10,10], [40,40], [40,40]])
vm_map[tuple(a.T)] = vm_map[tuple(a.T)] + [1,.5,.3, .2]

print(vm_map[40,40])

Мы бы хотели, чтобы этот блок кода печатал .5, добавляя две [40,40] координаты, вместо этого он печатает .2, поскольку это было последнее значение, которое он получил по этой координате.

1 Ответ

3 голосов
/ 12 июня 2019

Вы можете использовать np.add.at для добавления на месте в указанных координатах:

vm_map = np.zeros((100,100))
a = np.array([[0,1], [10,10], [40,40], [40,40]])

np.add.at(vm_map, tuple(zip(*a)), [1,.5,.3, .2])

print(vm_map)
array([[0., 1., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...