【发布时间】:2021-12-18 05:57:06
【问题描述】:
非常快速的问题,
我有以下距离函数
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 变得非常昂贵
【问题讨论】:
-
那么您的
columnA在每个单元格中有2 个坐标? -
请提供您的数据框示例
-
@QuangHoang 不,这些是带有常规浮点数的 2 列。它现在的工作方式,对于 df.iloc[0, columnA] 它遍历整个 B 列并保存最大值,然后转到 df.iloc[1,columnA] 并重复。现在有 O(n^2)
-
@mozway ColA 和 ColB 有浮点数,colC 将是最大距离。行取决于数据集
-
使用distance_matrix...
标签: python pandas numpy vectorization