如何解决在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 举报,一经查实,本站将立刻删除。