Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求两个向量之间每对的距离_Python_Scipy - Fatal编程技术网

Python 求两个向量之间每对的距离

Python 求两个向量之间每对的距离,python,scipy,Python,Scipy,我有两个向量,比如说x=[2,4,6,7]和y=[2,6,7,8],我想找到每个对应对之间的欧几里德距离,或任何其他实现的距离(例如,从scipy开始)。那将是 dist=[0,2,1,1] 当我尝试 dist = scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') 或 我明白了 ValueError: XA must be a 2-dimensional array. 我应该如何计算距离?为什么我必须为此重塑数据?cdist不计算

我有两个向量,比如说
x=[2,4,6,7]
y=[2,6,7,8]
,我想找到每个对应对之间的欧几里德距离,或任何其他实现的距离(例如,从scipy开始)。那将是
dist=[0,2,1,1]

当我尝试

dist = scipy.spatial.distance.cdist(x,y, metric='sqeuclidean')

我明白了

ValueError: XA must be a 2-dimensional array.

我应该如何计算距离?为什么我必须为此重塑数据?

cdist不计算对应对之间的距离列表,而是计算所有对之间的距离矩阵

np.linalg.norm((np.asarray(x)-np.asarray(y))[:, None], axis=1)

是id通常如何为n维点之间的欧几里德距离编写的;但是,如果您只处理一维点,则elpres建议的绝对差异会更简单。

小心列表理解中使用的变量名(
表示x,y
)。理解完成后,它们仍然可见。在您的示例中,这些变量与
x
y
向量相同,因此理解完成后,
x
y
将等于每个向量的最后一个值,而不是向量本身。
x
y
是否如用户提供的那样列在这里?我不确定这是否可行。例如,我正在寻找一种方法,使我能够应用scipy实现的任何距离度量。实际上我需要一维向量的每个值与标量的距离;对于不同的规范,它有很多选择
np.linalg.norm((np.asarray(x)-np.asarray(y))[:, None], axis=1)