python - 如何定义(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 数组之外,还有没有更好的方法来定义网格?
解决方案
您确实可以为此使用 numpy 。一种方法是将3d
数组定义为np.zeros((x_coor, y_coor, 2))
并保存沿最后一个轴的每个坐标。
使用 numpy 获得所需结构的另一种方法是定义一个ndarray
of 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')])
请注意,元组是不可变的,因此如果您打算使用这些坐标执行操作,您应该使用第一种方法。
推荐阅读
- android - 在 Android Api 29 中设置自定义铃声
- firebase - 如何将数据导入 csv 格式的 firebase?
- git - Git如何将存储库合并到特定目录?
- styles - 修改功能时如何更改样式而不停止修改
- c# - 通过 C# -> Powershell 更新 O365 许可证
- etl - 无法使用颠簸转换在 json 以下进行转换
- android - Android 单元测试在 Repository 上使用 Kotlin-Coroutine 添加/设置喜爱的电影
- android - Espresso android - IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient 已经注册
- python-3.x - 有没有办法用硒刮掉这个网页?
- javascript - Javascript - 由较小的类组成的类