Список координат xy для матрицы - PullRequest
2 голосов
/ 15 марта 2019

У меня есть список кортежей, содержащих пары координат x, y. Я хочу преобразовать список в матрицу, где координаты xy представляют индексы матрицы с использованием numpy и без использования цикла.

Для любой координаты xy, присутствующей в списке, имейте 1 в соответствующей позиции индекса и 0 для любого значения, отсутствующего в списке.

Оригинальный список:

a = [(0,0),(0,2),(0,3),(0,4),
    (1,1),(1,2),(1,4),(2,2),
    (3,2),(3,4), (4,4)]
a

Желаемый результат: массив измерений (5,5)

[
 [1, 1, 0, 1, 1],
 [1, 0, 0, 0, 0],
 [1, 1, 1, 1, 0],
 [0, 1, 0, 0, 0],
 [1, 0, 0, 0, 0]
                ]

Аналогично python - numpy создает 2D маску из списка индексов + затем рисует из замаскированного массива - переполнение стека , но без использования scipy.

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Используйте numpy.add.at и numpy.rot90:

import numpy as np

res = np.zeros((5,5))
np.add.at(res, tuple(zip(*a)), 1)
np.rot90(res)
array([[1., 1., 0., 1., 1.],
       [1., 0., 0., 0., 0.],
       [1., 1., 1., 1., 0.],
       [0., 1., 0., 0., 0.],
       [1., 0., 0., 0., 0.]])
1 голос
/ 15 марта 2019

Это будет работать:

import numpy as np

a = [(0,0),(0,2),(0,3),(0,4),     # The list we start with
    (1,1),(1,2),(1,4),(2,2),
    (3,2),(3,4), (4,4)]

ar = np.array(a)                  # Convert list to numpy array
res = np.zeros((5,5), dtype=int)  # Create, the result array; initialize with 0
res[ar[:,0], ar[:,1]] = 1         # Use ar as a source of indices, to assign 1
print (res)

Выход:

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