Отображение точки в массив numpy - PullRequest
0 голосов
/ 07 апреля 2020

Это, вероятно, простой вопрос.

Я хочу получить numpy индексы для точки с x, y декартовыми координатами. Должен ли я использовать int(), floor(), ceil() или ни один из них?

Массив numpy представляет сетку, и позиция (0,0) декартовой системы должна быть на центр массива numpy.

Я нашел изображение, на котором виден мой вопрос:

screenshot showing desired mapping of coordinate to grid

1 Ответ

0 голосов
/ 07 апреля 2020

Допустим, вы работаете в декартовой плоскости 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. Чтобы «исправить» ссылки на индексы, просто смещайте индексы массива на половину одномерного диапазона при каждой ссылке на двумерный массив:

>>> 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

Это, очевидно, надуманный пример.

...