Вы действительно можете использовать numpy для этого. Одним из способов было бы определить массив 3d
как np.zeros((x_coor, y_coor, 2))
и сохранить каждую из координат вдоль последней оси.
Другим способом получения желаемой структуры с использованием numpy может быть определение ndarray
из tuples
и обновление каждой точки упомянутым способом, то есть grid[x,y] = (value1,value2)
. Вот как это можно сделать:
x_coor=135
y_coor=120
grid = np.zeros((5,3), dtype='i,i')
grid[0,0] = (1,2)
grid[2,2] = (5,1)
grid[1,0] = (3,5)
print(grid)
array([[(1, 2), (0, 0), (0, 0)],
[(3, 5), (0, 0), (0, 0)],
[(0, 0), (0, 0), (5, 1)],
[(0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0)]], dtype=[('f0', '<i4'), ('f1', '<i4')])
Если вы хотите обновить несколько значений одновременно, используя несколько координат, вы можете сделать:
grid = np.zeros((5,3), dtype='i,i')
coordinates = np.array([(1,2),(2,2), (0,0)], dtype='i,i')
new_vals = np.array([(12,2),(4,1), (0,9)], dtype='i,i')
grid[tuple(zip(*coordinates))] = new_vals
print(grid)
array([[( 0, 9), ( 0, 0), ( 0, 0)],
[( 0, 0), ( 0, 0), (12, 2)],
[( 0, 0), ( 0, 0), ( 4, 1)],
[( 0, 0), ( 0, 0), ( 0, 0)],
[( 0, 0), ( 0, 0), ( 0, 0)]], dtype=[('f0', '<i4'), ('f1', '<i4')])
Обратите внимание, что кортежи неизменны , поэтому, если вы планируете выполнять операции с этими координатами, вам следует использовать первый подход.