Tái tạo kết quả Gradient đa chiều bằng Python
Sep 22 2020
Trong Octave, tôi có
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)
đầu ra nào
1.18882 1.92355 1.92355 1.18882 0.00000 -1.18882 -1.92355 -1.92355 -1.18882 -0.00000
Với Python, tôi đã cố gắng tái tạo nó,
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])
tôi có
[-1.18882065 -0.59441032 0.59441032 1.55618643 1.92355221 1.55618643
0.59441032 -0.59441032 -1.55618643 -1.92355221]
trông khác. Làm cách nào để gradientcuộc gọi Numpy khớp với kết quả Octave?
Phiên bản Numpy của tôi là 1.19.0, Octave là 4.2.2.
Tôi thấy bài đăng này hỏi một câu hỏi khác về độ dốc của Matlab / Python, lệnh gọi đó phù hợp với tôi, mà tôi đoán là trường hợp chiều thấp.
Trả lời
3 obchardon Sep 22 2020 at 16:59
- Matlab / Octave sử dụng bố cục chính cột theo mặc định
- Numpy sử dụng bố cục chính hàng theo mặc định
Vì vậy, bạn cần phải đảo ngược thứ tự trục của hai kích thước đầu tiên:
a,b,c = np.gradient (u, dx, dy, dz, axis=[1,0,2])