作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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。可按它是错误的(为什么?)
但是,下面的 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)
最佳答案
以下是一种以最少计算量查找元素列表之间的欧几里得距离的方法。如果您有 @Jan-Pieter 的答案中提到的两个 CU 和 O 原子列表,您可以使用以下方法找到距离:
for atom1 in CUlist:
print(np.linalg.norm(Olist - atom1, axis=1))
或者您可以使用列表理解,
distance_matrix=[np.linalg.norm(Olist - atom1, axis=1) for atom1 in CUlist]
它的作用是,在每次迭代中计算整个 Olist 元素数组与 CUlist 中的一个元素之间的欧氏距离。
关于python - 欧氏距离的迭代计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59563382/
我是一名优秀的程序员,十分优秀!