求 python 中 2 个多维数组之间的 minkowski 距离
To find minkowski distance between 2 multidimensional arrays in python
我有一个数据框 'df',我想从中提取值并放入 2 个不同的 3D 数组。
然后我想找到数据集中整组值的两个数组之间的 minkowski 距离,并将这些值(根据 p_values)附加到原始数据框。
但是我无法正确创建函数
我的 df 看起来像:
x1 y1 z1 x2 y2 z2
0 0.040928 0.250813 0.258730 0.050584 0.298290 0.273055
1 0.000000 0.174905 0.228518 0.011435 0.215528 0.233548
2 0.990905 0.746038 0.790401 0.972913 0.755414 0.822155
3 0.914052 0.669185 0.707238 0.922316 0.676172 0.734213
4 0.909504 0.480774 0.484074 0.915810 0.503221 0.489242
然后我将 2 个数组 p1 和 p2 定义为:
p1 = df[["x1", "y1", "z1"]].to_numpy()
p2 = df[["x2", "y2", "z2"]].to_numpy()
现在我想计算两个数组之间不同 p 值的 minkowski 值:
from math import sqrt
# calculate minkowski distance
def minkowski_distance(a, b, p):
return sum(abs(e1-e2)**p for e1, e2 in zip(a,b))**(1/p)
dist = minkowski_distance(p1,p2, 2)
dist
array([13.0317225 , 9.36364486, 7.56526207])
我希望生成的数据框如下所示:
x1 y1 z1 x2 y2 z2 m(1) m(2) m(3) ...
其中 m(1) 表示 p=1 的闵可夫斯基距离,依此类推
并且此数据框的所有行应对应于要计算距离的行值,即
(x1, y1, z1) <---------m--------> (x2,y2,z2)
你可以尝试用向量化的方式计算闵可夫斯基距离:
def minkowski_distance(a, b, p=2):
return np.sum(np.abs(a - b)**p, axis=1)**(1/p)
for p in range(1, 4):
df[f'm({p})'] = minkowski_distance(p1, p2, p)
我有一个数据框 'df',我想从中提取值并放入 2 个不同的 3D 数组。 然后我想找到数据集中整组值的两个数组之间的 minkowski 距离,并将这些值(根据 p_values)附加到原始数据框。 但是我无法正确创建函数
我的 df 看起来像:
x1 y1 z1 x2 y2 z2
0 0.040928 0.250813 0.258730 0.050584 0.298290 0.273055
1 0.000000 0.174905 0.228518 0.011435 0.215528 0.233548
2 0.990905 0.746038 0.790401 0.972913 0.755414 0.822155
3 0.914052 0.669185 0.707238 0.922316 0.676172 0.734213
4 0.909504 0.480774 0.484074 0.915810 0.503221 0.489242
然后我将 2 个数组 p1 和 p2 定义为:
p1 = df[["x1", "y1", "z1"]].to_numpy()
p2 = df[["x2", "y2", "z2"]].to_numpy()
现在我想计算两个数组之间不同 p 值的 minkowski 值:
from math import sqrt
# calculate minkowski distance
def minkowski_distance(a, b, p):
return sum(abs(e1-e2)**p for e1, e2 in zip(a,b))**(1/p)
dist = minkowski_distance(p1,p2, 2)
dist
array([13.0317225 , 9.36364486, 7.56526207])
我希望生成的数据框如下所示:
x1 y1 z1 x2 y2 z2 m(1) m(2) m(3) ...
其中 m(1) 表示 p=1 的闵可夫斯基距离,依此类推 并且此数据框的所有行应对应于要计算距离的行值,即
(x1, y1, z1) <---------m--------> (x2,y2,z2)
你可以尝试用向量化的方式计算闵可夫斯基距离:
def minkowski_distance(a, b, p=2):
return np.sum(np.abs(a - b)**p, axis=1)**(1/p)
for p in range(1, 4):
df[f'm({p})'] = minkowski_distance(p1, p2, p)