首页 > 解决方案 > 将一个点映射到一个 numpy 数组中

问题描述

这可能是一个简单的问题。

我想获取具有 x,y 笛卡尔坐标的点的 numpy 索引。我应该使用int(), floor(),ceil()还是不使用它们?

numpy 数组表示一个网格图,笛卡尔坐标系的 (0,0) 位置应该在 numpy 数组的中心。

我发现了一张显示我的问题的图片:

显示坐标到网格的所需映射的屏幕截图

标签: pythonnumpygraphicsmappingdrawing

解决方案


假设您在 5x5 笛卡尔平面上工作。您可能决定用 numpy 表示您的飞机,如下所示:

>>> x = np.arange(-12,13)
>>> x.shape = (5,5)
>>> x
array([[-12, -11, -10,  -9,  -8],
       [ -7,  -6,  -5,  -4,  -3],
       [ -2,  -1,   0,   1,   2],
       [  3,   4,   5,   6,   7],
       [  8,   9,  10,  11,  12]])

但是您的问题是您的原点不在(0,0):

>>> x[0,0]
-12

因为所有数组都从 0 开始。要“修复”索引引用,只需在引用二维数组时将数组索引偏移 1D 范围的一半:

>>> x[math.floor(0 - 5/2),math.floor(0 - 5/2)]
0

同样地:

>>> x[math.floor(-2 - 5/2),math.floor(-2 - 5/2)]
-12

你可以像这样引用你的数组:

>>> for i in range(-2,3):
...     for j in range(-2,3):
...             ix = math.floor(i - 5/2)
...             jy = math.floor(j - 5/2)
...             x[ix,jy] = x[ix,jy] * 5
...             print("{0:>5}".format(x[ix,jy]),end="")
...     print()
...
  -60  -55  -50  -45  -40
  -35  -30  -25  -20  -15
  -10   -5    0    5   10
   15   20   25   30   35
   40   45   50   55   60

这显然是一个人为的例子。


推荐阅读