Por que não valem a pena conhecer:pyplot.aljava estados de documentação incorreta ordem de U, V parâmetros?

0

Pergunta

Antes de qualquer coisa, aqui é o Google Colab link para demonstrar o problema: https://colab.research.google.com/drive/1sq8Dn7wdNqbfRmz2SyQnj0MfRirxmneA?usp=sharing

Im utilizando matplotlib para desenhar alguns gradiente de campo gerado com:

x,y = numpy.gradient(array_2d)

E notei algo de estranho. A documentação indica que para plotagem 2d campo, você precisa passar U (x) e V(y). Exemplo:

plt.quiver(x, y)

Mas quando eu faço isso com Gaussian campo, é óbvio que algo está errado, porque o resultado parcelas setas todo. Mas quando eu inverter a ordem dos parâmetros, por exemplo:

plt.quiver(y, x)

Resultados em esperar perfeito gradiente de campo.

Estou ficando errado(documentação, código) ou há realmente algum problema?

Não se esqueça de verificar o Google Colab melhor understant o caso.

gradient matplotlib python
2021-11-19 00:32:31
1

Melhor resposta

1

O quiver função e a sua documentação estão corretas, apenas mal-interpretado a saída do gradient função.

Na saída, a primeira matriz (np.gradient(gaussianMatrix)[0]) é o gradiente ao longo do primeiro eixo (axis=0 = linhas da matriz), que é o eixo y no matplotlib e a segunda matriz é para o segundo eixo (axis=1 = colunas da matriz), que é o eixo x valem a pena conhecer:

Isso também é explicado na documentação (nos exemplos da seção após a terceira exemplo):

Para duas dimensões de matrizes, o retorno será de dois arrays ordenados por eixo. Neste exemplo, a primeira matriz representa o gradiente de linhas e a segunda, em colunas de direção:

Para que esteja em linha com o matplotlib de documentação eu recomendo usar u e v em vez de x e y se você não passar a seta locais, mas apenas as direções. Portanto, seu código deve ser:

v,u = numpy.gradient(array_2d)
plt.quiver(u, v)
2021-11-19 11:37:00

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................