首页 > 解决方案 > 如何定义(x,y)坐标的二维数组

问题描述

我有一个(x,y)坐标的二维空间,我想在 python 中建模,并且想知道一种在 python 中定义二维空间的方法,我可以将多个值分配给一个点(x,y)。之后的坐标值将根据一些坐标相关的计算而改变。

我考虑过使用 numpy 数组根据用户输入的大小创建二维数组。我首先创建了一个 2d n*m numpy 零数组,后面的代码计算部分是在点上完成的。但是这样每个点 (x,y) 只有一个值。

import numpy as np

x_coor=135

y_coor=120

grid=np.zeros((x_coor,y_coor)

有没有办法让它 grid[x,y]=(value1,value2),除了 numpy 数组之外,还有没有更好的方法来定义网格?

标签: pythonnumpymultidimensional-array2dcartesian-coordinates

解决方案


您确实可以为此使用 numpy 。一种方法是将3d数组定义为np.zeros((x_coor, y_coor, 2))并保存沿最后一个轴的每个坐标。

使用 numpy 获得所需结构的另一种方法是定义一个ndarrayof 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')])

请注意,元组是不可变的,因此如果您打算使用这些坐标执行操作,您应该使用第一种方法。


推荐阅读