Правильный numpy способ создать плоский список индексов в массиве - PullRequest
3 голосов
/ 21 марта 2020

Ладно, это супер-базис c, что, к сожалению, означает, что его поиск дает баджиллионные хиты, которые все делают что-то другое и / или более сложное.

Рассмотрим этот код:

shape = (10, 20)
indices = []
for i in range(shape[0]):
    for j in range(shape[1]):
        indices.append([i, j])

или альтернативно indices = itertools.product(range(10), range(20)).

Теперь я чувствую, что должна быть простой numpy функцией, которая делает то же самое? Что-то вроде

indices = np.indices_into_shape((10, 20))

Большинство функций генерации индекса, которые я могу найти с помощью поиска, генерируют несколько массивов, как в meshgrid или ix_.

Ответы [ 2 ]

3 голосов
/ 21 марта 2020

Вы можете сложить сетки:

np.dstack(np.meshgrid(np.arange(10), np.arange(20), indexing='ij')).reshape(-1, 2)
1 голос
/ 21 марта 2020

Один путь будет

np.argwhere(np.broadcast_to(True,(3,4)))
# array([[0, 0],
#        [0, 1],
#        [0, 2],
#        [0, 3],
#        [1, 0],
#        [1, 1],
#        [1, 2],
#        [1, 3],
#        [2, 0],
#        [2, 1],
#        [2, 2],
#        [2, 3]])

другим (похож на @ MadPhysicist's)

np.c_[np.unravel_index(np.arange(3*4),(3,4))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...