在Python中再现多维渐变结果 [英] Reproducing Multidimensional Gradient Results in Python

查看:19
本文介绍了在Python中再现多维渐变结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Octave,我有

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,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, yy, zz = np.meshgrid(np.arange(-0.8, 1.2, 0.2),
                         np.arange(-0.8, 1.2, 0.2),
                         np.arange(-0.8, 1.2, 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,0]
dz = zz[0,0,:]

a,b,c = np.gradient (u, dx, dy, 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]

这看起来不一样。如何使Numpygradient调用与Octave结果匹配?

我的Numpy版本是1.19.0,Octave是4.2.2。

我看到this post在问另一个Matlab/Python渐变问题,该调用对我有效,我猜这就是低维情况。

推荐答案

  • 默认情况下,MatLab/Octave使用列主布局
  • 默认情况下,粗粗使用行主布局

因此您需要颠倒前两个维度的轴顺序:

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

这篇关于在Python中再现多维渐变结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆