Они не одно и то же, но могут создавать одинаковые массивы.
Один экземпляр класса использует []
, другой - функцию. Один создает список, другой - кортеж. Один принимает нотацию срезов напрямую (следствие нотации []
, другой требует списки или массивы или вывод объекта np.r_
.
In [8]: np.ogrid[0:9.,0:6.]
Out[8]:
[array([[0.],
[1.],
[2.],
[3.],
[4.],
[5.],
[6.],
[7.],
[8.]]), array([[0., 1., 2., 3., 4., 5.]])]
In [10]: np.ix_(np.r_[0:9.],np.r_[0:6.])
Out[10]:
(array([[0.],
[1.],
[2.],
[3.],
[4.],
[5.],
[6.],
[7.],
[8.]]), array([[0., 1., 2., 3., 4., 5.]]))
meshgrid
также может создавать список:
In [14]: np.meshgrid(np.arange(9.),np.arange(6.),indexing='ij',sparse=True)
Out[14]:
[array([[0.],
[1.],
[2.],
[3.],
[4.],
[5.],
[6.],
[7.],
[8.]]), array([[0., 1., 2., 3., 4., 5.]])]
Вы также можете сделать массивы «напрямую»:
In [15]: (np.arange(9.).reshape(-1,1), np.arange(6.).reshape(1,-1))
Out[15]:
(array([[0.],
[1.],
[2.],
[3.],
[4.],
[5.],
[6.],
[7.],
[8.]]), array([[0., 1., 2., 3., 4., 5.]]))
np.arange
и np.r_
могут создать тот же массив, хотя r_
предоставляет еще несколько колоколов и свистит.
Вы можете прочитать код самостоятельно по адресу: numpy/lib/index_tricks.py