Python Numpy 高效极地欧氏距离
Python Numpy efficient Polar euclidean distance
我有一个包含 n 个极坐标的列表,以及一个接受两个坐标的距离函数。
我想创建一个 n x n 矩阵,其中包含我函数下的成对距离。我意识到我可能需要对 numpy 使用某种形式的矢量化,但不确定具体如何操作。
您可以使用 scipy.spatial.distance.pdist
。但是,如果您要计算的距离是欧几里德距离,您最好将点转换为直角坐标,因为这样 pdist
将使用其内置的欧几里德距离快速进行计算。
下面有一个简单的代码段供大家参考
import numpy as np
length = 10
coord_r = np.random.rand(length)*10
coord_alpha = np.random.rand(length)*np.pi
# Repeat vector to matrix form
coord_r_X = np.tile(coord_r, [length,1])
coord_r_Y = coord_r_X.T
coord_alpha_X = np.tile(coord_alpha, [length,1])
coord_alpha_Y = coord_alpha_X.T
matDistance = np.sqrt(coord_r_X**2 + coord_r_Y**2 - 2*coord_r_X*coord_r_Y*np.cos(coord_alpha_X - coord_alpha_Y))
print matDistance
我有一个包含 n 个极坐标的列表,以及一个接受两个坐标的距离函数。
我想创建一个 n x n 矩阵,其中包含我函数下的成对距离。我意识到我可能需要对 numpy 使用某种形式的矢量化,但不确定具体如何操作。
您可以使用 scipy.spatial.distance.pdist
。但是,如果您要计算的距离是欧几里德距离,您最好将点转换为直角坐标,因为这样 pdist
将使用其内置的欧几里德距离快速进行计算。
下面有一个简单的代码段供大家参考
import numpy as np
length = 10
coord_r = np.random.rand(length)*10
coord_alpha = np.random.rand(length)*np.pi
# Repeat vector to matrix form
coord_r_X = np.tile(coord_r, [length,1])
coord_r_Y = coord_r_X.T
coord_alpha_X = np.tile(coord_alpha, [length,1])
coord_alpha_Y = coord_alpha_X.T
matDistance = np.sqrt(coord_r_X**2 + coord_r_Y**2 - 2*coord_r_X*coord_r_Y*np.cos(coord_alpha_X - coord_alpha_Y))
print matDistance