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

2024-10-02 00:38:43 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文

我在Python和numpy中工作,使用数组来表示三维地形。这个数组的形状是(0.0,0.0,0.0),terrainLength,在这个问题中,terrainLength通常是400。我用(x,z)来称呼,而y现在无关紧要。似乎在numpy中实现这一点的最佳方法如下:长度为三个数组(即顶点)的一维数组。这意味着如果我想在(x=5,y=?,z=10),我必须参考地形阵列[x*地形长度+z]即地形阵列[2010]。在

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

问题

我写了一对函数来转换直觉(x,?,z)坐标系和numpy的一维坐标系。如上所述,如果我想在(x=5,y=?,z=10),我必须参考地形阵列[x*地形长度+z]即地形阵列[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-为了预先准备好“为什么不使用一个形状数组((0.0),3),它只包含y坐标,并假设x坐标和z坐标来自位置”,我仍然在编写地形系统,这已经造成了各种各样的破坏(例如,很难引入可变的地形分辨率…)。在


Tags: 方法函数numpyindexreturn系统def数组
2条回答

你想做的事应该行得通。你使用floor,/,and%,是这类事情通常的处理方式。在

一般来说,避免全局变量是首选,但是如果这是一次性的项目,那就不成问题了。在

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

相关问题 更多 >

    热门问题