向量化最大距离函数
Vectorising max distance function
真正快速的问题,
我有以下距离函数
def distance(a1,a2,b1,b2):
return sqrt((a2-a1)**2 + (b2-b1)**2)
我想计算数据框中 A 列和 B 列中每个点之间的距离,并将最大值保存在 C 列中。
现在我在嵌套循环中遍历每个并使用 distance(df.loc[i, colA], dftest.loc[i,colB], dftest.loc[j, colA], dftest.loc[j.colB]) 并检查是否大于前一个。
我知道有一种方法可以对其进行矢量化,只是无法理解它。
我不需要任何现成的函数,但请清楚如何对其进行矢量化。
感谢任何帮助!
编辑:
数据框示例,其中 colB 是所需的输出:
ColA| ColB| ColC
7.6 |8.2 |6.79 (max distance which is between this row and row3)
6.6 |4.4 |3.92 (max distance is with row1, greater than row3)
4.4 |2.2 |6.79 (max distance is with row1)
例如,第一行的 ColC 是用距离 (7.6,8.2,4.4,2.2) 计算的,但是函数 distnace 必须遍历所有组合
更大的 dfs 变得非常昂贵
因为你不想使用库,你可以使用底层的 numpy 数组,广播向量计算并获得最大值:
import numpy as np
a = df.values # easier reference to numpy array
b = (a[:,0]-a[:,0,None])**2+(a[:,1]-a[:,1,None])**2 # (a2-a1)**2 + (b2-b1)**2
df['ColC'] = np.sqrt(b.max(0))
输出:
ColA ColB ColC
0 7.6 8.2 6.800000
1 6.6 4.4 3.929377
2 4.4 2.2 6.800000
真正快速的问题,
我有以下距离函数
def distance(a1,a2,b1,b2):
return sqrt((a2-a1)**2 + (b2-b1)**2)
我想计算数据框中 A 列和 B 列中每个点之间的距离,并将最大值保存在 C 列中。
现在我在嵌套循环中遍历每个并使用 distance(df.loc[i, colA], dftest.loc[i,colB], dftest.loc[j, colA], dftest.loc[j.colB]) 并检查是否大于前一个。 我知道有一种方法可以对其进行矢量化,只是无法理解它。
我不需要任何现成的函数,但请清楚如何对其进行矢量化。
感谢任何帮助!
编辑: 数据框示例,其中 colB 是所需的输出:
ColA| ColB| ColC
7.6 |8.2 |6.79 (max distance which is between this row and row3)
6.6 |4.4 |3.92 (max distance is with row1, greater than row3)
4.4 |2.2 |6.79 (max distance is with row1)
例如,第一行的 ColC 是用距离 (7.6,8.2,4.4,2.2) 计算的,但是函数 distnace 必须遍历所有组合
更大的 dfs 变得非常昂贵
因为你不想使用库,你可以使用底层的 numpy 数组,广播向量计算并获得最大值:
import numpy as np
a = df.values # easier reference to numpy array
b = (a[:,0]-a[:,0,None])**2+(a[:,1]-a[:,1,None])**2 # (a2-a1)**2 + (b2-b1)**2
df['ColC'] = np.sqrt(b.max(0))
输出:
ColA ColB ColC
0 7.6 8.2 6.800000
1 6.6 4.4 3.929377
2 4.4 2.2 6.800000