2012-09-13 27 views
50

Estoy buscando una comparación clara de las funciones meshgrid -like. Desafortunadamente no lo encuentro!Mesh grid functions en Python (meshgrid mgrid ogrid ndgrid)

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

  • mgrid

  • ogrid

  • meshgrid

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

  • ndgrid

  • boxgrid

Lo ideal sería una tabla que resume todo esto sería perfecto!

+1

¿Cómo no es una pregunta constructiva? – aquirdturtle

+1

@aquirdturtle. Me estaba preguntando lo mismo. El número de votos ascendentes a la pregunta y respuesta es una buena indicación de su utilidad. Y los documentos no son tan claros como podrían ser. –

Respuesta

62

numpy.meshgrid se modela después del comando meshgrid de Matlab. Se utiliza para Vectorise funciones de dos variables, por lo que se puede 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]]) 

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

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

y obtener el mismo resultado.

mgrid y ogrid son clases auxiliares que utilizan la notación índice para que pueda crear y XXYY en los ejemplos anteriores directamente, 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 la materia SciTools, pero ndgrid parece equivalente a meshgrid, mientras BoxGrid es en realidad una clase entera para ayudar con este tipo de generación.

+0

Gracias por su respuesta. Pero no entiendo lo que debería usar si tengo 3 parámetros (o más) ¡vamos a llamarlos x1, x2, x3! – scls

+1

Meshgrid es explícitamente 2D. Todos los demás admiten más dimensiones. Eso realmente explicaría la existencia de ndgrid. – chthonicdaemon

+2

Los resultados de malla de malla y mgrid son diferentes. Simplemente pruebe mgrid [1: 4, 1: 4] y meshgrid ([1,2,3], [1,2,3]). – FJDU