If we have a 2d array, for example 100x100, and we want to add values to it based on their coordinates, how can we avoid overwriting the previous coordinate value's value?
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])
We would like this code block to print .5, adding the two [40,40] coordinates, instead it prints .2, as that was the last value it received at that coordinate.
You could use np.add.at
for an in-place addition at the specified coordinates:
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.]])
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.