【发布时间】:2021-10-09 16:05:18
【问题描述】:
我有多个形状数组 (12,3)。假设它们是 Q、V、R、S。这些数组实际上是 xyz 坐标(省略了原子符号)对于一个样本,我试图计算 Q 中的粒子与 V 数组中的粒子之间的最小距离。除此之外,我想要最小距离的 xyz 分量。 对于输出距离和 xyz 分量,我创建了两个数组并将距离和 xyz 分量值附加到它们。这是我的代码,
import numpy as np
xyz_QV=[]; r_QV=[]
def min_distance(A,B):
diff=10**20
for i in A:
for j in B:
k=np.linalg.norm(i-j)
if k < diff:
diff = k
#xyz_QV.append(i-j)
xyz_QV.append(i-j)
return diff
print('r_min=',min_distance(V,Q))
r_QV.append(min_distance(V,Q))
xyz_QV=np.array(xyz_QV)
print(xyz_QV)
print(r_QV)
我手动检查了距离数组是否正常,但我得到的 xyz 组件是错误的,我得到的不是一排 xyz,而是两行。 请帮忙。
另外,如果我想为QS和RS找到相同的,我需要在函数中修改什么?
提前致谢..
编辑 1:提供示例数组
Q = np.array([[ 0.71264532, 1.1209957 , 0.06054078],
[ 1.35784165, 1.98639917, 0.12773717],
[ 1.25823573, -0.1592519 , 0.12423352],
[ 2.32495428, -0.28709988, 0.24674303],
[ 0.42688496, -1.27452666, 0.04265043],
[ 0.85044465, -2.26843268, 0.09474995]])
R = np.array([[ 0.42688496, -1.27452666, 0.04265043],
[ 0.85044465, -2.26843268, 0.09474995],
[-0.94957784, -1.11007406, -0.1003136 ],
[-1.5944557 , -1.9762737 , -0.16371348],
[-1.49552564, 0.17105056, -0.16154602],
[-2.56378279, 0.29922115, -0.27370311]])
V = np.array([[ 1.82750755, 1.11126079, 3.25188149],
[ 2.47235268, 1.97744454, 3.31563221],
[ 2.37346068, -0.16989031, 3.31340122],
[ 3.44166756, -0.29803736, 3.42614544],
[ 1.5418112 , -1.28549041, 3.23475079],
[ 1.9648929 , -2.27984284, 3.28440446]])
我得到的输出是
r_min= 3.069280599179459
[[ 1.11444826 -0.01141016 3.18965451]
[ 1.11444826 -0.01141016 3.18965451]]
[3.069280599179459]
【问题讨论】:
-
首先,不要在 Python 中使用分号。其次,请更正您的缩进,以便清楚函数定义的内部和外部。最后,请提供示例输入、预期输出、实际输出(如果有)以及任何错误或回溯的全文。
-
另外,请尽量使用比单个字母更具描述性的变量名称。
-
你能澄清一下你想找到哪些对的距离吗?都是 Q、V、R、S 对吗?
-
@MattDMo 我没有收到错误。好的,让我分享两个示例输入和输出。
-
@ddejohn 我提供了 Q、R 和 V 数组。我可以得到 Q-V 、 V-R 和 Q-R 之间的最小距离吗?
标签: python python-3.x numpy