我正在尝试创建一个matplotlib脚本,它将打印完全相同的由MATLAB脚本生成的箭袋图。在
抱歉,我不能发布图片,因为我没有足够的权限,但基本上我的python脚本给我的绘图是完全不同的(完全错误的矢量方向)。在
我比较了MATLAB和python在运行时的数据。十、 Y,Z是相同的,但是没有正确计算梯度,python中的ieU
与MATLAB中的DX
不一样。
为什么会这样呢???在
MATLAB语言
%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
^{pr2}$
简而言之:您将
numpy.gradient
视为使用“column”、“row”索引。它返回dy, dx
,而您期望的是dx, dy
。在首先,这是一个非常非常糟糕的主意,除非你是交互式地使用它。名称空间是你的朋友。在
考虑到这一点,您当前的示例如下:
这会产生箭头指向错误方向的结果:
如果我们交换一下,就会得到正确的结果:
^{pr2}$您还可以考虑使用
numpy.mgrid
,因为它比较短,而且为了一致性。numpy.meshgrid
默认情况下,对于2D案例,它会交换一些东西(返回x,y而不是y,x),这使得它的行为与其他任何东西都不一致。(np.meshgrid(..., indexing='ij')
修复了此问题,但默认行为有点混乱。)例如:
相关问题 更多 >
编程相关推荐