【发布时间】:2020-01-02 12:29:23
【问题描述】:
我是 python 和 numpy 的新手。 我可以生成原子的笛卡尔坐标。例如(CuO)n
我想计算不同种类原子之间的原子间距离(欧几里得距离),例如Cu 到 O 反之亦然。不是 O 到 O 或 Cu 到 Cu。
这是 (CuO)n n=2 笛卡尔坐标的示例。 (为方便起见,本题加了(Cu)和(O)符号)
0.000410140 0.000000000 -1.1437349409 (Cu1)
0.021984617 0.000000005 0.432069216 (Cu2)
0.021984488 0.000000005 0.432067361 (O1)
-0.043697492 0.000000005 0.432252977(O2)
随着n 大小的增加,将生成另外两个笛卡尔坐标。
那么,我的问题是如何计算迭代欧几里得距离,例如 Cu1 到 O1 然后 Cu2 到 O2、然后 Cu2 到 O1、Cu2 到 O2?
a = np.loadtxt({file})
for {} in a:
d = np.sqrt(np.sum((a[int(x)]-a[int(y)]**2))
n=2
x < n
y >= n+1
a[0] to a[3], and a[1] to a[4]
我可以看出我在 for 循环中分配多个变量的弱点。
试用 1
a = np.loadtxt({data})
cation = a[:{n}]
anion = a[{n}:]
d = np.sqrt(np.sum((cation-anion)**2))
print(d)
此值为 1.5809706852417704。可能是错误的(WHY?)
但是,下面的 for 循环给出了所有值, 1.5759499815439955、1.5766050227405235、1.859480034843622e-06、0.0656823660565985
for x in cation:
for y in anion:
d = np.sqrt(np.sum((x-y)**2))
print (d)
【问题讨论】:
-
@Paul 我知道如何计算欧几里得距离我想知道多个变量的迭代循环
-
明确地说,您将所有数据都放在一个文件中?您如何知道哪些行用于 Cu 哪些行用于 O?此外,您的 Cu2 和 O1 看起来非常接近;对吗?