Assume the next dictionary is given:
{(0, 0): 1, (1, 1): 12, (2, 2): 802, (3, 3): 1687, (4, 4): 11, (5, 4): 4, (6, 5): 593, (7, 4): 4}
In the dictionary above each key displays a point in the matrix (x, y)
and a value displays the value found in the matrix. How could I construct an array that will contain the values located at each point x
, y
?
According to the dictionary above the expected result is:
array([[ 1, 0, 0, 0, 0, 0], [ 0, 12, 0, 0, 0, 0], [ 0, 0, 802, 0, 0, 0], [ 0, 0, 0, 1687, 0, 0], [ 0, 0, 0, 0, 11, 0], [ 0, 0, 0, 0, 4, 0], [ 0, 0, 0, 0, 0, 593], [ 0, 0, 0, 0, 4, 0]])
Advertisement
Answer
You could use np.add.at
, defining the shape of the array beforehand from the keys:
d = {(0, 0): 1, (1, 1): 12, (2, 2): 802, (3, 3): 1687, (4, 4): 11, (5, 4): 4, (6, 5): 593, (7, 4): 4} i,j = zip(*d.keys()) a = np.zeros((max(i)+1,max(j)+1), np.int32) np.add.at(a, tuple((i,j)), tuple(d.values())) a array([[ 1, 0, 0, 0, 0, 0], [ 0, 12, 0, 0, 0, 0], [ 0, 0, 802, 0, 0, 0], [ 0, 0, 0, 1687, 0, 0], [ 0, 0, 0, 0, 11, 0], [ 0, 0, 0, 0, 4, 0], [ 0, 0, 0, 0, 0, 593], [ 0, 0, 0, 0, 4, 0]])