Gradient de calcul avec python
Je voudrais savoir comment numpy.gradient
travail.
J'ai utilisé un dégradé à essayer de calculer vitesse de groupe (vitesse de groupe d'un paquet d'ondes est la dérivée de fréquences relativement à wavenumbers, pas un groupe de vitesses). Je nourris un 3 colonne de tableau, les 2 premières colonnes sont x et y, coords, la troisième colonne est la fréquence de ce point (x,y). J'ai besoin de calculer le gradient et je l'ai fait attendre un 2d vectoriel, être dégradé définition
df/dx*i+df/dy*j+df/dz*k
et ma fonction seulement une fonction de x et y, je l'ai fait attendre à quelque chose comme
df/dx*i+df/dy*j
Mais j'ai eu 2 tableaux avec 3 colonnes chacune, 2 3d vecteurs; au début, je pensais que la somme des deux pourrait me donner le vecteur i ont été searchin pour mais la composante z ne veut pas disparaître. J'espère que j'ai été suffisamment clair dans mon explication. Je voudrais savoir comment numpy.gradient
fonctionne et si c'est le bon choix pour mon problème. Sinon, je voudrais savoir si il y a d'autre fonction python que je peux utiliser.
Ce que je veux dire, c'est: je veux calculer le gradient d'un tableau de valeurs:
data=[[x1,x2,x3]...[x1,x2,x3]]
où x1,x2 sont les coordonnées des points sur une grille uniforme (mes points sur la zone de brillouin) et x3 est la valeur de la fréquence de ce point. Je donne également des mesures pour la dérivation pour les 2 directions:
stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)
la même pour y la direction.
Je n'ai pas construit de mes données sur une grille, j'ai déjà une grille et c'est pourquoi la nature les exemples donnés ici dans les réponses ne m'aide pas.
Plus exemple d'adaptation doit avoir une grille de points et des valeurs comme celui que j'ai:
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)
une autre chose que je peux ajouter, c'est que ma grille n'est pas un carré, mais a la forme d'un polygone en cours de la zone de brillouin d'un cristal 2d.
J'ai bien compris que numpy.gradient
ne fonctionne correctement que sur un carré de la grille de valeurs, pas ce que je suis searchin pour. Même si je fais mes données sous forme d'une grille qui auraient beaucoup de zéros à l'extérieur du polygone de mes données d'origine, qui permettrait d'ajouter à très haute vecteurs de mon dégradé affectant (négativement) la précision du calcul. Ce module me semble plus un jouet qu'un outil, il a de sérieuses limites à mon humble avis.
Problème résolu à l'aide de dictionnaires.
- Soooo quelle est la question? Ce module, vous devez utiliser? Est quelque chose qui va pas?
- La Question est que dois-gradient de faire? Pourquoi me donne 2 3d vecteurs au lieu de 1 vectoriels en 2d? Ne gradient de calculer vraiment un dégradé? Par sa sortie je ne peux pas dire. Ne regarde pas exact pour moi.
- Je pensais que c'était clair, 3ème volet de mon entrée est le champ scalaire, chaque valeur de la 3e composante est la valeur de ma fonction pour chaque (x,y) point.
- le problème, c'est que vous donnez à gradient de la saisie erronée. Il ne s'occupe pas
x1,x2
ou dans le dernier exemplei,j
. Il veut juste une matrice dei**2+j**2
valeurs. Il est implicite que votre matrice dei**2+j**2
valeurs correspondent à laxy
avion, et l'option scalaire arguments degradient
compte pour l'étape de la taille des hypothèses, c'est à dire si votrex
points ne sont pas1
loin de l'autre, et de même pour votrey
points. Je vais en ville aujourd'hui, mais je vais mettre à jour ma réponse quand je serai de retour ce soir.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de donner
gradient
une matrice qui décrit votre fréquence angulaire des valeurs pour votre(x,y)
points. par exemple,Vous pouvez voir que le traçage en Z de la surface donne:
Ici est de savoir comment interpréter votre dégradé:
gx
est une matrice qui donne le changementdz/dx
à tous les points. par exemple, gx[0][0] estdz/dx
à(x0,y0
). La visualisation degx
aide à la compréhension:Depuis mes données a été généré à partir
f(x,y) = sin(x+y)
gy regarde la même chose.Ici est un exemple évident à l'aide de
f(x,y) = sin(x)
...f(x,y)
et les gradients de
mise à jour prenons un coup d'oeil à la xy paires.
C'est le code que j'ai utilisé:
Maintenant, nous pouvons regarder et de voir exactement ce qui se passe. Dire que nous avons voulu savoir ce point a été associée à la valeur à
Z[20][30]
? Alors...Et le point est
Est ce que le droit? Nous allons vérifier.
Oui.
Et quelles sont nos gradient de composants à ce point?
Ceux de check-out?
dz/dy always 0
vérifier.dz/dx = cos(x)
et...Semble bon.
Vous remarquerez qu'ils ne sont pas tout à fait correcte, c'est parce que ma Z de données n'est pas continu, il existe une étape de taille de
0.05
etgradient
peut seulement se rapprocher le taux de changement.x,y,z
données déjà, de sorte que vous n'avez pas besoin d'une fonction...juste faire Z de façon appropriée avec vos données de fréquence.gx
etgy
donnerx
ety
dérivés pour chaque point dans Z, ce qui devrait être unX
parY
de la matrice.gradient
une matrice de votre Z-valeurs et calcule pas-sage de la pente entre chaqueX,X+1
etY,Y+1
, vous donnant, pour chaque point, le taux de variation dex
ety
à ce point. c'est à dire qu'il se rapproche de l'évaluation de f(x,y) =(2x,2y)
.