微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中再现多维渐变结果

如何解决在Python中再现多维渐变结果

在八度音阶中,我有

x = -0.8:0.2:1;
y = -0.8:0.2:1;
z = -0.8:0.8:1;

[xx,yy,zz] = meshgrid(x,y,z);

u = sin(pi .* xx) .* cos(pi .* yy) .* cos(pi .* zz);

dx = xx(1,:,1)(:);
dy = yy(:,1,1)(:);
dz = zz(1,:)(:);

[a,b,c] = gradient (u,dx,dy,dz);
b(1,1)

输出

1.18882   1.92355   1.92355   1.18882   0.00000  -1.18882  -1.92355  -1.92355  -1.18882  -0.00000

使用Python,我试图复制它,

import numpy as np

xx,zz = np.meshgrid(np.arange(-0.8,1.2,0.2),np.arange(-0.8,0.8))


u = np.sin(np.pi * xx) * np.cos(np.pi * yy) * np.cos(np.pi * zz)

dx = xx[0,0]
dy = yy[:,0]
dz = zz[0,:]

a,c = np.gradient (u,dz)
print (b[0,0])

我明白了

[-1.18882065 -0.59441032  0.59441032  1.55618643  1.92355221  1.55618643
  0.59441032 -0.59441032 -1.55618643 -1.92355221]

看起来不一样。如何使Numpy gradient呼叫与八度结果相匹配?

我的Numpy版本是1.19.0,八度是4.2.2。

我看到this post提出了另一个Matlab / Python渐变问题,该问题对我来说很有效,我猜这是低维情况。

解决方法

  • 默认情况下Matlab / Octave使用列的主要布局
  • 默认使用Numpy使用行主要布局

因此,您需要反转前两个维度的轴顺序:

a,b,c = np.gradient (u,dx,dy,dz,axis=[1,2])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。