我正在尝试创建一个matplotlib脚本,它将打印与MATLAB脚本产生的相当相似的quiver图。
很抱歉,我无法发布图片,因为我没有足够的权限,但基本上我的python脚本给了我完全不同的图(向量方向完全错误)。
我在运行时比较了MATLAB和python之间的数据。X、Y、Z是相同的,但是梯度并没有正确计算,即python中的U与MATLAB中的DX不同。这是为什么呢?
Python
很抱歉,我无法发布图片,因为我没有足够的权限,但基本上我的python脚本给了我完全不同的图(向量方向完全错误)。
我在运行时比较了MATLAB和python之间的数据。X、Y、Z是相同的,但是梯度并没有正确计算,即python中的U与MATLAB中的DX不同。这是为什么呢?
%2D quiver
[X,Y] = meshgrid(-2:.2:2);
Z = X.*exp(-X.^2 - Y.^2);
[DX,DY] = gradient(Z,.2,.2);
contour(X,Y,Z)
hold on
quiver(X,Y,DX,DY)
%colormap hsv
grid off
hold off
Python
from pylab import *
from numpy import ma
import numpy as np
import matplotlib.pyplot as plt
X,Y = np.meshgrid( np.linspace(-2,2,21),np.linspace(-2,2,21))
Z=X*np.exp(-X*X-Y*Y)
[U,V]=gradient(Z,.2,.2)
print U
figure()
Q = quiver(X,Y,U,V)
show()
numpy.gradient
基本上会返回dy, dx
。你把它当作返回dx, dy
来处理了。Numpy 的索引是行、列。因此,np.gradient
实际上返回的是dy, dx
而不是dx, dy
。 - Joe Kington