我在文本文件中有如下数据
ATOM 2 CA ALA A 2 25.587 -25.158 -9.461 1.00 59.65 C
ATOM 7 CA LYS A 3 23.789 -25.564 -12.791 1.00 56.33 C
ATOM 16 CA ILE A 4 23.990 -21.786 -13.168 1.00 47.06 C
ATOM 24 CA ASP A 5 27.381 -20.176 -12.568 1.00 45.48 C
ATOM 32 CA ASN A 6 27.343 -16.666 -11.069 1.00 38.90 C
ATOM 40 CA ALA A 7 23.585 -16.811 -10.459 1.00 31.65 C
ATOM 45 CA VAL A 8 22.594 -13.568 -8.716 1.00 27.49 C
ATOM 52 CA LEU A 9 20.243 -15.584 -6.497 1.00 25.94 C
ATOM 60 CA PRO A 10 21.933 -18.297 -4.388 1.00 26.36 C
我想计算每个CA原子与彼此原子的距离。第7,8和9列分别是X,Y,Z的坐标。要找到距离(即)距离= sqrt((x2-x1)** 2+(y2-y1)** 2+(z2-z1)** 2),最后打印数值及其相应的残差对。< / p>
我怎么能用python
做到这一点输出如下:
ALA-LYS:3.66
ALA-ILE:3.33
ALA-ASP:3.42
ALA-ASN:3.54
ALA-ALA:3.32
ALA-VAL:4.32
ALA-LEU:2.65
ALA-PRO:3.22
LYS-ALA:4.35
LYS-ILE:3.33
LYS-ASP:3.67
依此类推(输出中的值不正确)
答案 0 :(得分:0)
假设您将数据作为嵌套的numpy
数组加载(您也可以使用Pandas
数据框),您可以组成distance
函数来计算欧氏距离。其余的东西应该可以通过嵌套的for
循环实现。
import numpy
def distance(x1,x2,y1,y2,z1,z2):
return round(numpy.sqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2),3)
#data is the data loaded as a nested numpy array
out = []
for i in data:
for j in data:
if i==j:
continue
d = distance(i[6],j[6],i[7],j[7],i[8],j[8])
out.append(i[3]+'-'+j[3]+': '+str(d)+'\n')
print(out)