Python/numpy:将索引拆分为坐标 上下文

Python/numpy:将索引拆分为坐标 上下文,python,division,modulus,Python,Division,Modulus,我正在使用Python和numpy,使用数组表示3D地形。阵列的形状为((0.0,0.0,0.0),terrainLength),其中terrainLength(就本问题而言)通常为400。我用(x,z)来表示,y与现在无关。在numpy中实现这一点的最佳方法似乎如上所述:长度为三个数组(即顶点)的一维数组。这意味着,如果我想拉出(x=5,y=?,z=10)处的顶点,我必须参考terrain_array[x*terrainLength+z]即terrain_array[2010] 标题中提到的“

我正在使用Python和numpy,使用数组表示3D地形。阵列的形状为((0.0,0.0,0.0),terrainLength),其中terrainLength(就本问题而言)通常为400。我用(x,z)来表示,y与现在无关。在numpy中实现这一点的最佳方法似乎如上所述:长度为三个数组(即顶点)的一维数组。这意味着,如果我想拉出(x=5,y=?,z=10)处的顶点,我必须参考terrain_array[x*terrainLength+z]即terrain_array[2010]

标题中提到的“任意基”是terrainLength:我认为,如果我在1D numpy和2D平面栅格参考之间切换,numpy的坐标系就像有一个base-400系统,其中z是最右边的列,x是下一个左边的列

问题: 我正在编写一对函数,在直观的(x,?,z)坐标系和numpy的一维坐标系之间进行转换。如上所述,如果我想拉出(x=5,y=?,z=10)处的顶点,我必须参考terrain_array[x*terrainLength+z]即terrain_array[2010]。似乎我的函数将受益于使用/和%,但我想知道这是否是最佳实践,假设正整数坐标:

def toGridCoords( matrix_index ):
    global terrainLength
    return floor(matrix_index/terrainLength), matrix_index%terrainLength

def toArrayCoord( x, z ):
    global terrainLength
    return x*terrainLength+z
谢谢


PS-为了预防“为什么不拥有一个只包含y坐标并假设x坐标和z坐标的形状数组((0.0),3)”,我仍然在编写地形系统,这已经造成了各种破坏(例如,很难引入可变地形分辨率…).

你要做的应该很好。你使用地板、/、和%,是通常做这类事情的方式


一般来说,避免使用全局变量是首选,但如果这是一个一次性的项目,这应该不会是一个问题。

我想我在寻找同样的东西(如果我正确理解了你的问题)。如果是这样,您可以使用numpy

我对阵列形状感到困惑:这是一个3 x terrainLength阵列吗?给定(x,z)对是否有一个y值?比如说,你在使用一个统一的(x,z)值20x20网格吗?澄清一下:我在使用一个统一的(x,y,z)值400x400网格,我在寻求使用(x,z)值来处理给定的元组。terrain_数组[20]将返回位于(x=20,z=0)的元组,该元组将为(20.0,?,0.0)。这仅适用于生成函数:之后,我将手动移动顶点,因此(x,z)对不一定相关。但在当代,这是完全可行的。关键的部分是数组是用一维索引寻址的,所以我需要将二维索引转换为一维索引。从一维到二维的转换可能会涉及到/和%,因此我的问题是关于最佳实践。那么,为什么不使用二维数组呢?如果你需要从1-D转换到2-D,你可以使用np.Reformate。诚实的回答是因为我认为这会更整洁,可能是错误的。无论如何,感谢您的回复!