Funciones de rejilla de malla en Python (meshgrid mgrid ogrid ndgrid)

Estoy buscando una comparación clara de las funciones tipo meshgrid. Desafortunadamente no lo encuentro!

Numpy http://docs.scipy.org/doc/numpy/reference/ proporciona

Scitools http://hplgit.github.io/scitools/doc/api/html/index.html proporciona

  • ndgrid

  • boxgrid

¡Idealmente una tabla que resum todo esto sería perfecta!

numpy.meshgrid se modela después del comando meshgrid de Matlab. Se utiliza para vectorizar funciones de dos variables, para que pueda escribir

 x = numpy.array([1, 2, 3]) y = numpy.array([10, 20, 30]) XX, YY = numpy.meshgrid(x, y) ZZ = XX + YY ZZ => array([[11, 12, 13], [21, 22, 23], [31, 32, 33]]) 

Entonces, ZZ contiene todas las combinaciones de x e y puestas en la función. Cuando lo piensas, meshgrid es un poco superfluo para las matrices numpy, ya que transmiten. Esto significa que puedes hacer

 XX, YY = numpy.atleast_2d(x, y) YY = YY.T # transpose to allow broadcasting ZZ = XX + YY 

y conseguir el mismo resultado.

mgrid y ogrid son clases auxiliares que utilizan la notación de índice para que pueda crear XX e YY directamente en los ejemplos anteriores, sin tener que usar algo como linspace . El orden en que se generan los resultados se invierte.

 YY, XX = numpy.mgrid[10:40:10, 1:4] ZZ = XX + YY # These are equivalent to the output of meshgrid YY, XX = numpy.ogrid[10:40:10, 1:4] ZZ = XX + YY # These are equivalent to the atleast_2d example 

No estoy familiarizado con el tema de los scitools, pero ndgrid parece ser equivalente a meshgrid , mientras que BoxGrid es en realidad toda una clase para ayudar con este tipo de generación.

np.mgrid y np.meshgrid() hacen lo mismo, pero se intercambian el primer y el segundo eje:

 # 3D d1, d2, d3 = np.mgrid[0:10, 0:10, 0:10] d11, d22, d33 = np.meshgrid(np.arange(10),np.arange(10),np.arange(10)) np.array_equal(d1,d11) 

Los rendimientos son False . Solo intercambia las dos primeras dimensiones:

 d11 = np.transpose(d11,[1,0,2]) np.array_equal(d1,d11) 

cede el True .