2012-09-13 4 views
50

Sto cercando un confronto chiaro delle funzioni meshgrid-like. Purtroppo non lo trovo!Funzioni della griglia mesh in Python (meshgrid mgrid ogrid ndgrid)

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

  • mgrid

  • ogrid

  • meshgrid

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

  • ndgrid

  • boxgrid

Idealmente una tabella che riassume tutto questo sarebbe perfetto!

+1

Come non si tratta di una domanda costruttiva? – aquirdturtle

+1

@aquirdturtle. Mi stavo chiedendo lo stesso. Il numero di voti positivi per la domanda e la risposta è una buona indicazione della sua utilità. E i documenti non sono chiari come potrebbero essere. –

risposta

62

numpy.meshgrid è modellato dopo il comando meshgrid di Matlab. E 'usato per vectorise funzioni di due variabili, in modo da poter scrivere

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]]) 

Così ZZ contiene tutte le combinazioni di x e y messi in funzione. Quando ci pensi, lo meshgrid è un po 'superfluo per gli array numpy che trasmettono. Ciò significa che puoi fare

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

e ottenere lo stesso risultato.

mgrid e ogrid sono classi di supporto che usano la notazione indice in modo che è possibile creare e XXYY negli esempi precedenti direttamente, senza bisogno di usare qualcosa come linspace. L'ordine in cui viene generato l'output è invertito.

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 

non ho familiarità con la roba scitools, ma ndgrid sembra equivalente a meshgrid, mentre BoxGrid è in realtà un'intera classe per aiutare con questo tipo di generazione.

+0

Grazie per la risposta. Ma non capisco cosa dovrei usare se ho 3 parametri (o più) chiamiamoli x1, x2, x3! – scls

+1

Meshgrid è esplicitamente 2D. Gli altri supportano più dimensioni. Questo in realtà spiegherebbe l'esistenza di ndgrid. – chthonicdaemon

+2

I risultati di meshgrid e mgrid sono diversi. Prova mgrid [1: 4, 1: 4] e meshgrid ([1,2,3], [1,2,3]). – FJDU