Usando la meshgrid di Numpy

Usando la meshgrid di Numpy
Questo post mostrerà cos'è una meshgrid e come può essere creata e utilizzata in Python.

Una meshgrid è una griglia rettangolare di valori realizzati con vettori di coordinate. È anche che i valori nella meshgrid sono una funzione dei vettori di coordinate.
Supponiamo che tu voglia creare una meshgrid dai vettori di coordinate X e Y. Il modo ingenuo per farlo è creare una nuova griglia rettangolare e assegnare i valori della griglia valutando la funzione in ciascun punto della meshgrid. Il seguente codice ha illustrato il modo ingenuo:

MESHGRID Way ingenuo:

x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 2, 3, 4, 5]
z = [[0 per j in gamma (len (y))] per i nell'intervallo (x)]
per i in gamma (len (x)):
per j in gamma (len (y)):
z [i, j] = func (x [i], y [i])

Gli svantaggi di questo approccio sono che è noioso e la gestione di grandi vettori di coordinate richiede più tempo. La biblioteca Python Numpy per il calcolo scientifico aiuta a creare una meshgrid in modo più efficiente. Per creare un meshgrid, useremo la funzione numpy.meshgrid. Ecco la stessa soluzione usando Numpy.

$ Python3
Python 3.8.5 (impostazione predefinita, 8 marzo 2021, 13:02:45)
[GCC 9.3.0] su Linux2
Digita "Help", "Copyright", "Credit" o "Licenza" per ulteriori informazioni.
>>> Importa Numpy come NP
>>> x = np.Linspace (0, 6, 3)
>>> x
array ([0., 3., 6.])
>>> y = np.Linspace (1, 7, 3)
>>> y
array ([1., 4., 7.])
>>> xx, yy = np.meshgrid (x, y)
>>> xx
array ([[0., 3., 6.",
[0., 3., 6.",
[0., 3., 6.]])
>>> xx.forma
(3, 3)

Le operazioni vettoriali di Numpy lo rendono più veloce dei loop Python. Le vettorizzazioni aiutano delegando l'operazione di looping a un codice C altamente ottimizzato internamente e rendendolo più veloce. Esprime anche operazioni su tutti gli array piuttosto che sui singoli elementi degli array.

Valutare una funzione sul meshgrid è molto semplice. Tutto quello che dobbiamo fare è chiamare la funzione. Tracceremo anche la funzione valutata qui facendo un diagramma di contorno usando matplotlib. Continuando dall'esempio precedente,

>>> z = np.sin (xx ** 2 + yy ** 2)
>>> Importa matplotlib.Pyplot come Plt
>>> PLT.Figura (Figsize = (10, 6))
>>> PLT.Contourf (xx, yy, z)
>>> PLT.colorbar ()
>>> PLT.spettacolo()

Se l'array x e y sono troppo grandi, allora l'array xx e yy potrebbero occupare molto spazio. Questo può essere ottimizzato usando l'opzione sparsa = true.

>>> x = np.Linspace (0, 5, 6)
>>> y = np.Linspace (0, 5, 6)
>>> xx, yy = np.meshgrid (x, y, spars = false) #default
>>> xx
array ([[0., 1., 2., 3., 4., 5.",
[0., 1., 2., 3., 4., 5.",
[0., 1., 2., 3., 4., 5.",
[0., 1., 2., 3., 4., 5.",
[0., 1., 2., 3., 4., 5.",
[0., 1., 2., 3., 4., 5.]])
>>> xx.forma
(6, 6)
>>> xx, yy = np.meshgrid (x, y, spars = true) #default
>>> xx
array ([[0., 1., 2., 3., 4., 5.]])
>>> xx.forma
(1, 6)