Comment Calculer le Centre de gravité en python
Je suis débutant en python de codage. Je suis en train de travailler sur structurelles coordonnées. J'ai apb structure qui ont xyz coordonner l'information (les trois derniers col)
ATOM 1 N SER A 1 27.130 7.770 34.390
ATOM 2 1H SER A 1 27.990 7.760 34.930
ATOM 3 2H SER A 1 27.160 6.960 33.790
ATOM 4 3H SER A 1 27.170 8.580 33.790
ATOM 5 CA SER A 1 25.940 7.780 35.250
ATOM 6 CB SER A 1 25.980 9.090 36.020
ATOM 7 OG SER A 1 26.740 10.100 35.320
ATOM 8 HG SER A 1 26.750 10.940 35.860
ATOM 9 C SER A 1 24.640 7.790 34.460
ATOM 10 O SER A 1 24.530 8.510 33.500
ATOM 11 N CYS A 2 23.590 7.070 34.760
ATOM 12 H CYS A 2 23.590 6.550 35.610
ATOM 13 CA CYS A 2 22.420 7.010 33.900
ATOM 14 CB CYS A 2 21.620 5.760 34.270
ATOM 15 SG CYS A 2 22.480 4.210 33.970
ATOM 16 C CYS A 2 21.590 8.220 34.040
ATOM 17 O CYS A 2 21.370 8.690 35.160
- J'ai 1000 atomes dans ma structure.
- J'ai deux requêtes.
Comment je peux calculer le centre de gravité de la structure de coordonnées xyz.
De centre je veux dessiner une sphère de rayon 20 cm.
I try this
from __future__ import division
import math as mean
import numpy as nx
from string import*
infile = open('file.pdb', 'r') #open my file
text1 = infile.read().split('\n')
infile.close()
text = []
for i in text1:
if i != '':
text.append(i)
for j in text:
x1 = eval(replace(j[30:38], ' ', '')) #extract x-coordinate
y1 = eval(replace(j[38:46], ' ', '')) #extract y-coordinate
z1 = eval(replace(j[46:54], ' ', '')) #extract z-coordinate
idcord = []
idcord.append(x1); idcord.append(y1); idcord.append(z1)
centroid = nx.mean(idcord)
print centroid
il donne le centroïde de chaque atome (xyz)
j'ai besoin d'un point central
comment??????
S'il vous plaît montrer ce que vous avez essayé et que vous avez au moins regardé le centre de gravité sur wikipédia.
Dites-vous que le calcul du "centre de gravité" est simplement la moyenne de X, Y et Z les coordonnées? Ou de faire les points ont une masse?
oui, ils ont une masse aussi bien
Dites-vous que le calcul du "centre de gravité" est simplement la moyenne de X, Y et Z les coordonnées? Ou de faire les points ont une masse?
oui, ils ont une masse aussi bien
OriginalL'auteur awanit | 2013-09-10
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, un moyen plus facile de lire votre fichier est avec numpy est
genfromtxt
fonction. Vous n'avez pas besoin d'importer de la chaîne, et vous n'avez pas besoin de parcourir toutes les lignes et ajouter du texte ou de compter les caractères.Ensuite, les trois dernières colonnes sont accessibles:
Où la première
:
signifie "toutes les lignes", et-3:
moyens à partir de la troisième-à-dernière colonne à la dernière colonne.Ainsi, vous pouvez leur moyenne en tant que tel:
où la
axis=0
argument indiquenx.mean
de prendre la moyenne le long de la première (0th
) de l'axe. Il ressemble à ceci:Quelques autres choses:
1) supprimez cette ligne:
import math as mean
, qui importe la totalité de lamath
module et le renommemean
. Ce que vous avez l'intention étaitfrom math import mean
qui importe lemean
fonction de lamath
module. Mais dans votre code, vous vous retrouvez à l'aide de lamath
fonction de lanumpy
(nx
) module de toute façon, de sorte que vous n'avez jamais utilisé lemath
version.2) la boucle n'est pas en retrait, ce qui signifie que vous soit collées de manière incorrecte dans StackOverflow, ou votre boucle est mal indenté. Probablement, c'est ce que votre code ressemble réellement:
Mais le problème est que
idcord
est défini pour une liste vide chaque de la boucle, et un nouveau centre de gravité est calculé, pour chaque particule. Vous n'avez même pas besoin de la boucle à tous si vous importez le fichier de données à la fois comme ci-dessus. En fait, l'ensemble de votre code peut être:Vous êtes les bienvenus! La meilleure chose à faire est de continuer la recherche/poser des questions sur Stack Overflow pour vous assurer que vous êtes en train de faire les choses de la meilleure façon. Pour les choses, essayez de lire ce numpy tutoriel.
OriginalL'auteur askewchan
essayer cette
cela va faire chaque atome individuellement si vous le mettez à l'intérieur d'une boucle. Si vous le faites sur tous les atomes ensemble, cela vous donnera la moyenne totale de tout, comme un seul flotteur (y compris la moyenne de x,y et z des valeurs).
OriginalL'auteur lsb123