Python'da Çok Boyutlu Gradyan Sonuçlarını Yeniden Oluşturma
Sep 22 2020
Octave'de var
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)
hangi çıktılar
1.18882 1.92355 1.92355 1.18882 0.00000 -1.18882 -1.92355 -1.92355 -1.18882 -0.00000
Python ile onu kopyalamaya çalıştım,
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])
alırım
[-1.18882065 -0.59441032 0.59441032 1.55618643 1.92355221 1.55618643
0.59441032 -0.59441032 -1.55618643 -1.92355221]
farklı görünüyor. Numpy gradientçağrısının Octave sonuçlarıyla eşleşmesini nasıl sağlayabilirim ?
Numpy sürümüm 1.19.0, Octave 4.2.2.
Bu yazıyı başka bir Matlab / Python gradyan sorusu sorarken gördüm , bu çağrı benim için çalışıyor, sanırım düşük boyutlu durum.
Yanıtlar
3 obchardon Sep 22 2020 at 16:59
- Matlab / Octave varsayılan olarak ana sütun düzenini kullanır
- Numpy varsayılan olarak satır ana düzenini kullan
Bu nedenle, ilk iki boyutun eksen sırasını ters çevirmeniz gerekir:
a,b,c = np.gradient (u, dx, dy, dz, axis=[1,0,2])
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'