Преобразовать numpy отступов в (N * M) x 2 массив координат - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь получить массив, содержащий индексы каждого элемента в массиве N x M data в виде координат в формате (N * M) x 2, так что первый столбец массива содержит индексы строк и второй столбец содержит индексы столбца для data. Длина результирующего массива будет N * M, чтобы каждый элемент в data был в виде строки. Кроме того, список кортежей с информацией о координатах также будет достаточно.

В:

    0   1   2
  -------------
0 | a | b | c |
1 | e | f | g |
2 | h | i | j |
  -------------

В:

array([0, 0],
      [0, 1],
      [0, 2],
      [1, 0],
      [1, 1],
      [1, 2],
      ...   )

Я только смог найти вопросы от людей, совершающих обратное обращение, к сожалению. Моя конечная цель - передать этот массив в scipy.spatial.distance.cdist (), чтобы получить расстояние от каждой точки до любой другой точки. Я работаю с растровыми данными [(X, Y) -> Z], поэтому я не могу использовать cdist для значений ячейки , так как обычно она используется . Я новичок в numpy, так что это было немного головокружительным. Я изучил np.meshgrid, np.column_stack и np.unravel_index, но я не смог заставить их работать с выводом из np.indices.

Ответы [ 3 ]

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

Вы можете использовать list comprehension.

M = 3
N = 4

[(i, j) for i in range(N) for j in range(M)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2)]
0 голосов
/ 07 апреля 2020

Вы можете использовать unravel_index и форму данных, она работает с отдельными целыми числами или массивом целых чисел. В вашем случае вы можете получить все это в одной строке с:

np.array(np.unravel_index(np.arange(data.size),data.shape)).T
0 голосов
/ 07 апреля 2020

Я думаю, что вы можете сделать:

[*zip(*np.where(np.ones_like(a)))]

Вывод:

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...