Numpy создать массив всех координат - PullRequest
0 голосов
/ 29 мая 2018

Я хочу создать список всех возможных (x, y) значений.

Например - для ввода (x = 2, y = 3) вывод должен быть:

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

Порядок не имеет значения

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вдохновленный Divakar's indices_merged_arr, это должно быть fast .

def indices_for(m, n):
    i, j = np.ogrid[:m, :n]
    v = np.empty((m, n, 2), dtype=np.uint32)
    v[..., 0] = i
    v[..., 1] = j
    v.shape = (-1, 2)

    return v

>>> indices_for(3, 2)
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2]])

m, n = 10000, 10000
%timeit indices_for(m, n)
607 ms ± 9.12 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit np.argwhere(np.ones((m, n)))
4.69 s ± 225 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
0 голосов
/ 29 мая 2018

Быстро и грязно:

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