优化多词编辑距离的速度

2024-02-21

我有一个元胞数组字典,其中包含很多单词(约 15000 个)。

我想计算函数strdist(计算 Levenshtein 距离)所有单词对。我尝试了两种方法,但它们都很慢。什么是更有效的解决方案?

这是我的代码(dict_keys 是我长度为 m 的元胞数组):

1)

matrix = sparse(m,m);
for i = 1:m-1;
    matrix(i,:) = cellfun( @(u) strdist(dict_keys{i},u), dict_keys );
end

2)

matrix = sparse(m,m);
for i = 1:m-1;
  for j = i+1:m
     matrix(i,j) = strdist(dict_keys{i},dict_keys{j});
  end   
end

函数“strdist”不是内置的 matlab 函数,所以我猜你是从文件交换 http://de.mathworks.com/matlabcentral/fileexchange/17585-calculation-of-distance-between-strings/content/strdist.m。这也是为什么你的两种方法在时间上大致相等,cellfun内部只是扩展成一个循环。

If strdist是对称的,即 strdist(a,b)==strdist(b,a) 但是您可以节省一半的计算量。好像是这样,所以只计算所有情况j<i在第二个循环中(您正在执行的操作)。

否则,您可以在 C 中将 strdist 实现为 mex 函数,并且可能会看到一些显着的速度改进。 Levenshtein 距离的 C 实现可以在以下位置找到:Rosettacode.org http://rosettacode.org/wiki/Levenshtein_distance#C.

或者深入研究算法如何计算两个字符串的距离的细节,看看是否可以将其矢量化并减少二次运行时间。然而这可能并不容易。

最后,如果您拥有并行计算工具箱许可和多核 CPU,您可以轻松并行化您的代码,因为strdist调用之间完全独立。

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

优化多词编辑距离的速度 的相关文章

  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • 代表和结构的速度问题

    我遇到了一些与结构和委托有关的速度问题 采用以下控制台应用程序代码 public delegate string StringGetter public class LocalString public LocalString string
  • 处置 StreamResourceInfo.Stream

    I use StreamResourceInfo Stream to get BitmapImage来自资源 是否正确Close and Dispose使用后的流 我问这个问题是因为在内存分析器中 如果这样做我会收到错误 内存分析器表示已处
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 如何加快编辑距离计算速度

    我正在尝试运行模拟来测试平均值编辑距离 http en wikipedia org wiki Levenshtein distance之间随机 二进制字符串 我的程序是用 python 编写的 但我正在使用这个C扩展 https githu
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • 在hibernate统计中,load和fetch之间有什么区别

    我主要看EntityStatics http www hibernate org hib docs v3 api org hibernate stat EntityStatistics html http www hibernate org
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • .NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效的实现

    考虑到入队和出队操作的速度同样重要 NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效 就速度而言 的实现是什么 UniqueQueue是一个不可能出现重复的队列 因此 如果我将一个元素推送到队
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • SQLite .NET 性能,如何加快速度?

    在我的系统上 约 86000 个 SQLite 插入需要长达 20 分钟 意味着每秒约 70 个插入 我要做数百万 我怎样才能加快速度 对每一行的 SQLiteConnection 对象调用 Open 和 Close 会降低性能吗 交易有帮
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • 隐藏类以及 {} 对象与自定义构造函数之间的等效性 (v8)

    鉴于这篇文章 http richardartoul github io jekyll update 2015 04 26 hidden classes html http richardartoul github io jekyll upd
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需

随机推荐

  • 具有多个查找字段的 Rest 调用以进行反向查找

    在Django Rest框架中 有没有办法拥有多个查找字段 我知道这听起来不太好REST友好的 我有一个Company模型 我想首先通过国家 地区列出它们 然后通过 slug 字段列出它们 例如 companies
  • Restore_best_weights 问题 keras 提前停止

    我正在将 Keras 的 EarlyStopping 用于我的深度学习项目 文档here https keras io callbacks earlystopping提到了一个非常有用的恢复最佳体重的想法 但不知何故我还无法使用它 我使用的
  • 使用 lambda 表达式来避免使用“魔术字符串”来指定属性

    我正在编写一项服务来获取特定类型的对象集合输出其原始类型 字符串类型和日期时间类型 https stackoverflow com questions 3161959 in c is there a way retrieve only bu
  • C++ 使用 .o 链接和使用 .a 文件链接之间存在差异:行为不同,为什么?

    我期望 与 o 文件链接和与从 o 文件存档的 a 文件链接应该没有区别 但事实并非如此 我有2个源文件 每个都声明1个类 1个静态对象 1个函数 以及一个调用其中一个函数的main cpp cat First cpp include
  • 改变rgba颜色的色调

    我使用 RGBA 颜色在 matplotlib 中将一堆数据绘制为对数刻度上的散点图 以防万一介质相关 我希望能够做的是 一旦绘制了所有内容 我想挑选出各个散点并将其色调更改为某种 RGB 颜色的色调 但保留旧的 alpha 值 我目前的做
  • 将分类数据从 CSV 加载到 Scikit-Learn 以进行机器学习

    我正在学习 Scikit Learn 对推文进行一些分类 我有一个 csv 其中一列包含推文 下一列包含 0 11 的班级 我经历了本教程来自 Scikit Learn 网站 http scikit learn org stable tut
  • 日期范围越小SQL查询时间越长?

    我有一个简单的 select 语句 它从 SQL Server 2000 这么旧 的表中选择数据 该表大约有 10 2000 万行 如下所示 startDate 2014 01 25 yyyy mm dd endDate 2014 02 2
  • 如何按值对多维数组进行排序? [复制]

    这个问题在这里已经有答案了 我有一个如下数组 我想按键 attack 的值对该数组进行排序 数组的第一个键 15 13 18 是数据库中某些特定项目的 ID 因此我不希望在数组排序时更改这些键 任何帮助将不胜感激 这是数组 data arr
  • MongoException:名称索引:代码已存在且具有不同选项

    我有一个mongodb收藏term具有以下结构 id 00002c34 a4ca 42ee b242 e9bab8e3a01f terminologyClass USER code X67 terminology some term rel
  • 用 Haskell 解释 Parigot 的 lambda-mu 演算

    我们可以用 Haskell 来解释 lambda 演算 data Expr Var String Lam String Expr App Expr Expr data Value a V a F Value a gt Value a int
  • Powershell 中所有进程的 CPU 和内存使用百分比

    有没有一种方法可以查看所有正在运行的进程的 CPU 和内存利用率百分比PowerShell 我已经尝试过以下方法 Get Process Process 0 CPU Usage 1 Memory Usage 2 f ProcessName
  • Vue 路由器页面刷新时出现 404

    我正在使用具有历史模式的 Vue 路由器 在按钮上单击当前页面 我将其路由到下一页 在第二页上 当我重新加载时 我收到 404 有没有办法在 Vue 中处理这个问题并将其重定向到主页 export default new Router mo
  • 如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件

    我是 Alexa 技能开发的新手 我正在尝试开发一项 Alexa 通过我的电子邮件回复的技能 我正在开发 Java 技能 并且我刚刚能够通过以下方式获取用户会话 ID getSession getUser getUserId Getting
  • 如何记录 Azure 服务总线访问?

    有没有办法记录对 Azure 服务总线的访问 我们正在寻找一种方法来记录谁在服务总线中创建 删除主题 订阅 命名空间 无论是从 Azure 门户还是从外部源 如 API 或 Service Bus Explorer We have Azur
  • “错误:没有 Overlay 提供程序!”

    In my Angular 2 0 0 rc 7 Angular Material 2 0 0 alpha 8 1应用程序构建Angular CLI 1 0 0 beta 11 webpack 9 1 升级后出现以下错误rc 5 alpha
  • AWS 相当于 Firebase 实时数据库的是什么?

    我目前正在开发一个新的游戏项目 该项目将由 React Native 前端和基于 Lambda 的后端组成 该应用程序需要一些实时功能 例如活动用户记录 地理围栏等 我正在研究 Firebase 的实时数据库 它看起来像是一个非常优雅的实时
  • Vim:使用 \_ 跨多行匹配字符串时。在正则表达式中,:yank 命令仅适用于第一行

    我想提取一些跨越多行的文本的多次出现 并且可以与单个 Vim 正则表达式匹配 使用元字符 不幸的是 尽管 Vim 中匹配的行被正确突出显示 当我在匹配的正则表达式后添加任何 Vim 命令 例如删除或拉取 时 该命令仅适用于每场比赛的第一行
  • 在这种情况下我应该如何舍入浮点数?

    由于同一浮点数可以有多种表示形式 我的代码中遇到了问题 例如 这些数字被认为是相同的 0 0299999400 0 0300000000 我不太关心大精度 我需要计算CRC这些数字的数量 它们应该是相同的 所以我的方法是使用以下代码 pri
  • 在超级项目中自动提交 git 子模块哈希

    当你在git子模块中提交时 你需要到超级项目中进行第二次提交 这是子模块的新哈希 这非常烦人 很容易忘记 如果您不这样做 可能会导致各种问题 我想做的是 提交我的子模块中的更改 在超级项目中自动提交哈希 将子模块和超级项目推送到其远程源 g
  • 优化多词编辑距离的速度

    我有一个元胞数组字典 其中包含很多单词 约 15000 个 我想计算函数strdist 计算 Levenshtein 距离 所有单词对 我尝试了两种方法 但它们都很慢 什么是更有效的解决方案 这是我的代码 dict keys 是我长度为 m