我有一个代码,用于计算此输入文件中3D坐标的距离公式
input_file="mock_data.csv"
cmd=pd.read_csv(input_file)
subset = cmd[['carbon','x_coord', 'y_coord','z_coord']]
coordinate_values = [tuple(x) for x in subset.values]
atoms = coordinate_values
atomPairs = itertools.combinations(atoms, 2)
for pair in atomPairs:
x1 = pair[0][1]
y1 = pair[0][2]
z1 = pair[0][3]
x2 = pair[1][1]
y2 = pair[1][2]
z2 = pair[1][3]
"""Define the values for the distance between the atoms"""
def calculate_distance(x1,y1,x2,y2,z1,z2):
dist=math.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2-z1)**2)
return dist
d=calculate_distance(x1,y1,x2,y2,z1,z2)
我目前已编制代码来计算每个'碳'之间的距离。我的问题是我的坐标都是绝对值 - 每个坐标可以是正数或负数。我想计算所有可能坐标的每个碳之间的距离,即每个3D坐标的所有正和负组合。
快速示例:'carbon'1具有坐标(1.08,0.49,0.523),但也可以是(-1.08,-0.49,-0.523),( - 1.08,0.49,0.523),( - 1.08,-0.49) ,0.523),( - 1.08,0.49,-0.523),(1.08,-0.49,0.523),(1.08,-0.49,-0.523),(1.08,0.49,-0.523),总共有八种可能性每个坐标系。
我需要一个代码来遍历所有这些可能的坐标值来计算我已编码的距离。
答案 0 :(得分:0)
这是一个相当简单的例子。
import numpy as np
from itertools import product
from scipy.spatial.distance import cdist
base = np.array([-1,1]) #accounts for signed coord
x = 1*base #change coord values
y = 2*base
z = 3*base
coords = list(product(x,y,z)) #cartesian product
distances = cdist(coords,coords) #better implementation of distance