Usando a Meshgrid de Numpy

Usando a Meshgrid de Numpy
Esta posta.

Uma Meshgrid é uma grade retangular de valores feitos de vetores de coordenadas. É também que os valores no Meshgrid são uma função dos vetores de coordenadas.
Digamos que você queira criar uma malha fora dos vetores de coordenadas x e y. A maneira ingênua de fazer isso é criar uma nova grade retangular e atribuir os valores da grade, avaliando a função em cada ponto da mhhgrid. O código a seguir ilustrou a maneira ingênua:

Meshgrid Way Ingening:

x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 2, 3, 4, 5]
z = [[0 para j no intervalo (len (y)]] para i no intervalo (x)]
para i no intervalo (len (x)):
para j em range (len (y)):
z [i, j] = func (x [i], y [i])

As desvantagens dessa abordagem são que ela é tediosa, e lidar com grandes vetores de coordenadas leva mais tempo. A biblioteca Python Numpy para a computação científica ajuda a criar um mhhgrid com mais eficiência. Para criar um Meshgrid, usaremos a função Numpy.Meshgrid. Aqui está a mesma solução usando Numpy.

$ python3
Python 3.8.5 (padrão, 8 de março de 2021, 13:02:45)
[GCC 9.3.0] no Linux2
Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações.
>>> importar numpy como 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)

As operações vetorizadas de Numpy o tornam mais rápido que os loops de Python. Vectorizações ajudam a delegar a operação de loop para o código C altamente otimizado internamente e tornando -o mais rápido. Ele também expressa operações em todas as matrizes, em vez dos elementos individuais das matrizes.

Avaliar uma função sobre o Meshgrid é muito fácil. Tudo o que precisamos fazer é apenas chamar a função. Também planejaremos a função avaliada aqui, fazendo um gráfico de contorno usando matplotlib. Continuando do exemplo anterior,

>>> z = np.sin (xx ** 2 + yy ** 2)
>>> importar matplotlib.pyplot como plt
>>> PLT.Figura (FigSize = (10, 6))
>>> PLT.contorno (xx, yy, z)
>>> PLT.Barra de cor()
>>> PLT.mostrar()

Se a matriz x e y forem muito grandes, então a matriz xx e você pode ocupar muito espaço. Isso pode ser otimizado usando a opção Sparse = true.

>>> x = np.Linspace (0, 5, 6)
>>> y = np.Linspace (0, 5, 6)
>>> xx, yy = np.Meshgrid (x, y, esparso = 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, esparso = true) #default
>>> xx
Array ([[0., 1., 2., 3., 4., 5.]])
>>> xx.forma
(1, 6)