Что такое numpy.mgrid, технически? - PullRequest
0 голосов
/ 19 января 2019

Я давно пользуюсь numpy.mgrid и знаю, что он делает. Но с тех пор мне стало интересно, что это на самом деле ...

Типичный вариант использования и синтаксис для mgrid будет

xx, yy = mgrid[0:5, 0:3]

Меня беспокоит синтаксис mgrid[...], который заставляет меня поверить, что mgrid не является функцией или методом. документы говорят, что mgrid это

Экземпляр nd_grid, который возвращает плотную многомерную «сетку».

Что это делает в фоновом режиме? И почему он используется как функция, но синтаксис отличается от синтаксиса функции (я бы ожидал что-то вроде mgrid((0,5), (0,3))). Я действительно потерян, пытаясь понять, что такое mgrid.

Любые идеи приветствуются!

1 Ответ

0 голосов
/ 19 января 2019

numpy.mgrid является объектом из MGridClass in numpy/index_tricks.py. Этот объект позволяет вам строить многомерные сетки, как вы уже знаете.

MGridClass расширяет класс nd_grid , который реализует метод __getitem__. Квадратные скобки фактически делегируют вызов nd_grid.__getitem__, который реализует основную логику для построения сетки на основе переданных фрагментов.

Краткое описание работы nd_grid можно найти здесь.

class dummy_1d_grid:
    def __getitem__(self, val):
        print(val)
        return np.arange(val.start, val.stop, val.step, )

mgrid_1d = dummy_1d_grid()
mgrid_1d[:5]

slice(0, 5, None)
# array([0, 1, 2, 3, 4])

np.mgrid[0:5]
# array([0, 1, 2, 3, 4])

Конечно, это все детали реализации, поэтому макет и классы могут быть изменены. Необходимо сосредоточиться на том, что это экземпляр класса, реализующий метод __getitem__. Следовательно это нарезано, а не называется.

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