Chciałbym wiedzieć, jak działa numpy.gradient
. Użyłem gradientu, aby spróbować obliczyć prędkość grupy (prędkość grupy pakietu falowego jest pochodną częstotliwości w odniesieniu do liczb falowych, a nie grupy prędkości). Wprowadziłem do niego tablicę 3-kolumnową, pierwsze 2 kolumny to współrzędne x i y, trzecia kolumna to częstotliwość tego punktu (x, y). Trzeba obliczyć nachylenie i ja spodziewałam 2d wektor, będąc definicji gradientuObliczenia gradientowe z pytonem
df/dx*i+df/dy*j+df/dz*k
i moja funkcja tylko funkcją x, yi nie spodziewać się czegoś podobnego
df/dx*i+df/dy*j
ale mam 2 tablice z 3 kolumny każdy, tj. 2 wektory wektorowe; na początku myślałem, że suma tych dwóch da mi wektor, którego szukam, ale składnik z nie zniknie. Mam nadzieję, że wyjaśniłem wystarczająco jasno. Chciałbym wiedzieć, jak działa numpy.gradient
i czy jest to właściwy wybór dla mojego problemu. W przeciwnym razie chciałbym wiedzieć, czy istnieje jakakolwiek inna funkcja Pythona, której mogę użyć.
Chodzi mi o to: Chcę, aby obliczyć gradient tablicy wartości:
data=[[x1,x2,x3]...[x1,x2,x3]]
gdzie x1, x2 są współrzędne punktów na jednolitej siatki (moje punkty od strefy Brillouina) i x3 jest wartość częstotliwości dla tego punktu. Podaję również dane wejściowe dla wyprowadzenia dla 2 kierunków:
stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)
to samo dla kierunku y. Nie zbudowałem swoich danych na siatce, mam już siatkę, dlatego nie pomagają mi dobre przykłady podane tutaj w odpowiedziach. bardziej stosowny przykład powinien mieć siatkę punktów i wartości, takich jak jeden mam:
data=[]
for i in range(10):
for j in range(10):
data.append([i,j,i**2+j**2])
data=array(data,dtype=float)
gx,gy=gradient(data)
innego co mogę dodać, to to, że moja siatka nie jest kwadratem jeden, ale ma kształt wielokąta, będących Brillouin strefa kryształu 2d.
Zrozumiałem, że numpy.gradient
działa poprawnie tylko na kwadratowej siatce wartości, a nie tego, czego szukam. Nawet jeśli zrobię moje dane jako siatkę, która miałaby wiele zer poza poligonem moich oryginalnych danych, to dodałoby naprawdę wysokie wektory do mojego gradientu, wpływając (negatywnie) na precyzję obliczeń. Ten moduł wydaje mi się raczej zabawką niż narzędziem, ma poważne ograniczenia imho.
Problem rozwiązany za pomocą słowników.
Soooo jakie jest pytanie? Z jakiego modułu powinieneś skorzystać? Czy coś idzie nie tak? – Stephan
Pytanie, co robi gradient? Dlaczego daje mi 2 wektory 3d zamiast wektora 1d? Czy gradient faktycznie oblicza gradient? Przez jego wyjście nie mogę powiedzieć. Nie wygląda mi to dokładnie. –
Myślałem, że było jasne, trzeci komponent mojego wejścia to pole skalarne, każda wartość na trzecim komponencie jest wartością mojej funkcji dla każdego punktu (x, y). –