以最快的方式处理大数据集的豪斯多夫距离

2023-11-27

我的数据集中的行数超过 500000。我需要每个的豪斯多夫距离id自己与他人之间。并对整个数据集重复此操作

我有一个巨大的数据集。这是小部分:

df = 

id_easy ordinal latitude    longitude            epoch  day_of_week
0   aaa     1.0  22.0701       2.6685   01-01-11 07:45       Friday
1   aaa     2.0  22.0716       2.6695   01-01-11 07:45       Friday
2   aaa     3.0  22.0722       2.6696   01-01-11 07:46       Friday
3   bbb     1.0  22.1166       2.6898   01-01-11 07:58       Friday
4   bbb     2.0  22.1162       2.6951   01-01-11 07:59       Friday
5   ccc     1.0  22.1166       2.6898   01-01-11 07:58       Friday
6   ccc     2.0  22.1162       2.6951   01-01-11 07:59       Friday

我想计算豪斯多夫距离:

import pandas as pd
import numpy as np

from scipy.spatial.distance import directed_hausdorff
from scipy.spatial.distance import pdist, squareform

u = np.array([(2.6685,22.0701),(2.6695,22.0716),(2.6696,22.0722)]) # coordinates of `id_easy` of taxi `aaa`
v = np.array([(2.6898,22.1166),(2.6951,22.1162)]) # coordinates of `id_easy` of taxi `bbb`
directed_hausdorff(u, v)[0]

输出是0.05114626086039758


现在我想计算整个数据集的这个距离。对全部id_easys。期望的输出是矩阵0在对角线上(因为之间的距离aaa and aaa is 0):

     aaa      bbb    ccc
aaa    0  0.05114   ...
bbb    ...   0
ccc             0

您正在谈论计算 500000^2+ 距离。如果每秒计算 1000 个这样的距离,则需要 7.93years来完成你的矩阵。我不确定是否豪斯多夫距离是对称的,但即使是对称的,也只能节省两倍(3.96 年)。

该矩阵还将占用大约 1 TB 的内存。

我建议仅在需要时才计算此值,或者如果您确实需要整个矩阵,则需要并行计算。从好的方面来说,这个问题很容易解决。例如,对于四个核心,您可以这样分割问题(​​用伪代码):

n = len(u)
m = len(v)
A = hausdorff_distance_matrix(u[:n], v[:m])
B = hausdorff_distance_matrix(u[:n], v[m:])
C = hausdorff_distance_matrix(u[n:], v[:m])
D = hausdorff_distance_matrix(u[n:], v[m:])
results = [[A, B],
           [C, D]]

Where hausdorff_distance_matrix(u, v)返回之间的所有距离组合u and v。不过,您可能需要将其分成四个以上的部分。

有什么应用?您可以只根据需要分段计算这些吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以最快的方式处理大数据集的豪斯多夫距离 的相关文章

随机推荐

  • Alamofire 接受和内容类型 JSON

    我正在尝试在 Swift 中使用 Alamofire 发出 GET 请求 我需要设置以下标题 Content Type application json Accept application json 我可以绕过它并直接指定请求的标头 但我
  • 将数组打印到文件

    我想将数组打印到文件中 我希望该文件看起来与这样的代码完全相同 print r abc 假设 abc 是一个数组 是否有任何单行解决方案可以解决此问题 而不是每种外观都常规解决方案 P S 我目前使用序列化 但我想让文件可读 因为序列化数组
  • Object.defineProperty 获取/设置闭包

    好的 我尝试这样创建新对象 var src a a b b c c var out for var prop in src Object defineProperty out prop get function return src pro
  • 尽管网站是 HTTPS,但 WebView 显示 ERR_CLEARTEXT_NOT_PERMITTED [重复]

    这个问题在这里已经有答案了 我开始在 Android 上开发一个应用程序 所以我没有太多东西 到目前为止我所拥有的只是一个 WebView 我在 Android Studio 中创建了该项目 并将我的项目设置为 Android Instan
  • 在 php 服务器端使用meteor.js

    我开发了一个应用程序 我想使用meteor js进行实时更新 我想增强但不改变我的程序 例如当用户添加评论时使其实时更新 问题是meteor js使用node js 因此javascript作为服务器端代码 我使用 LAMP 堆栈 是否可以
  • 阻止执行上传的php文件?

    在我的项目中 允许用户上传任何类型的文件 我需要确保安全 防止执行可由 php 解析的上传文件 php html 等 有没有办法告诉apache不要在web uploads中解析任何带有php的文件并简单地将它们显示为纯文本 还有什么其他选
  • Visual Studio 2013 编辑并继续不起作用

    使用 VS2013 Pro 我在调试 MFC 程序时无法使用 编辑并继续 我新建了一个MFC项目来测试 操作系统是 Windows 7 64 位 我正在运行 Visual Studio 2013 12 0 30110 00 Update1
  • 获取当前的 jupyter-lab 笔记本名称 [适用于 Jupyter-lab 版本 2.1 和 3.0.1 以及笔记本版本 >6.0.3)

    Problem Hi all 正如我的标题所示 我想访问笔记本名称 在Jupyter实验室 作为变量 所以我可以在笔记本本身中重用它 例如 命名笔记本中生成的一些图形文件 我看到几年前就有人提出过类似的问题 看这里 然而我没有找到满意的答案
  • Rails 如何决定使用 PUT 或 POST 方法渲染表单?

    Rails 生成一个表单部分 可以在由 get 操作呈现的页面和由新操作呈现的页面上使用 如果是前者 则表单的方法设置为 PUT 如果是后者 则表单的操作设置为 POST Rails 如何决定使用哪种方法 如果传递给表单的对象是persis
  • Symfony2 - 创建自己的供应商包 - 项目和 git 策略

    我们正在考虑创建自己的common用于实体映射和服务的捆绑包 可在几个单独的应用程序中使用 捆绑包应该易于修改 运行 包含和测试 我知道关于构建捆绑包的最佳实践 但我不知道什么git开发时使用的策略 我们是否应该创建common捆绑为整个项
  • android MediaRecorder setVideoSize() 的问题

    安卓可以吗MediaRecorder捕获分辨率高于的视频320 240 当我使用MediaRecorder setVideoSize 设置视频大小 捕获的视频分辨率均为320 240 更糟糕的是 较高的无法获得清晰的视频 它们莫名其妙地呈绿
  • 如何处理调用 API 的 Next.js 中动态路由的未找到 404? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我有一个由 React 和 Next js 在客户端开发的网站 并从 Asp Net core 服务器调用 API 来获取动态数据 例如产品和类别 问题是当我请求的 URL 中有未定义的参
  • 无法让我的 DatePickerDialog 以编程方式使用微调器样式

    我正在使用一个DialogFragment开一个DatePickerDialog public class DatePickerFragment extends DialogFragment Override public Dialog o
  • 使用 bootstrap 和 jquery 更改弹出窗口的标题

    这是链接的 html 即 a href style font size 6 color 222 class popover test laquo a 是的 我正在调用 popover 进行初始化 并且弹出窗口工作得很好 我可以毫无问题地更新
  • 从文件中读取随机行的简单方法是什么?

    在 shell 脚本中从文件中读取随机行的简单方法是什么 您可以使用shuf shuf n 1 FILE 还有一个实用程序称为rl 在 Debian 中它位于randomize lines软件包完全可以满足您的需求 但并非在所有发行版中都可
  • 如何在 Eclipse 中将常量重构为枚举?

    如何使用 Eclipse 将 Java 常量重构为枚举 我发现eclipse中没有内置功能 http help eclipse org juno index jsp topic 2Forg eclipse jdt doc user 2Fre
  • 使用 .NET 对象作为数据源时,为什么在 Crystal Reports 中出现“数据库登录失败”?

    我正在使用项目中的 NET 对象作为数据源创建一个简单的报告 使用SetDatasource 方法 但是 当我运行报告时 出现 数据库登录失败 错误 该报告根本没有连接到数据库 我在这里错过了什么吗 非常感谢 D 添加 我想如果我包含控制器
  • 带phonegap的AlarmManager

    我正在使用 Phonegap 的 StatusBarNotification 插件 Android 来触发通知 现在我想在特定时间执行此操作 根据我所读的内容 我必须使用 Android 的 AlarmManager 我尝试了一些方法 但似
  • 为什么 PHP PDO SQLite 总是创建一个新的空数据库文件?

    我创建了与数据库的连接 但我不知道为什么它总是创建一个新的空database sql 文件 当我重命名数据库文件时 他总是创建一个新文件 而不是给我一个错误 这是我的代码 db new PDO sqlite DIR database sql
  • 以最快的方式处理大数据集的豪斯多夫距离

    我的数据集中的行数超过 500000 我需要每个的豪斯多夫距离id自己与他人之间 并对整个数据集重复此操作 我有一个巨大的数据集 这是小部分 df id easy ordinal latitude longitude epoch day o