First of all, an easier way to read your file is with the numpy genfromtxt
function. You do not need to import a string, and you do not need to iterate over all the lines and add text or count characters.
from __future__ import division import numpy as nx data = nx.genfromtxt('file.pdb')
Then, the last three columns can be accessed as:
data[:, -3:]
If the first :
means "all rows", and -3:
means from the third to the last column to the last column.
So, you can average them as such:
nx.mean(data[:,-3:], axis=0)
where the axis=0
argument tells nx.mean
to take the average of the first ( 0th
) axis. It looks like this:
In : data[:,-3:] Out: array([[ 27.13, 7.77, 34.39], [ 27.99, 7.76, 34.93], [ 27.16, 6.96, 33.79], [ 27.17, 8.58, 33.79], [ 25.94, 7.78, 35.25], [ 25.98, 9.09, 36.02], [ 26.74, 10.1 , 35.32], [ 26.75, 10.94, 35.86], [ 24.64, 7.79, 34.46], [ 24.53, 8.51, 33.5 ], [ 23.59, 7.07, 34.76], [ 23.59, 6.55, 35.61], [ 22.42, 7.01, 33.9 ], [ 21.62, 5.76, 34.27], [ 22.48, 4.21, 33.97], [ 21.59, 8.22, 34.04], [ 21.37, 8.69, 35.16]]) In : np.mean(data[:,-3:], axis=0) Out: array([ 24.74647059, 7.81117647, 34.64823529])
Some other things:
1) delete this line: import math as mean
, which imports the entire math
module and renames it mean
. What you intended was from math import mean
, which imports the mean
function from the math
module. But in your code, you still use the math
function from the numpy
( nx
) module, so you never used the math
version.
2) your loop has no indentation, which means that you either incorrectly inserted into StackOverflow, or your loops incorrectly indented. This is probably what your code looks like:
for j in text: x1 = eval(replace(j[30:38], ' ', ''))
But the problem is that idcord
gets every empty cycle every time and calculates a new centroid for each particle. You donβt even need a loop if you immediately import a data file as described above. In fact, all of your code could be:
from __future__ import division import numpy as nx data = nx.genfromtxt('file.pdb') nx.mean(data[:,-3:], axis=0)