首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在M/PowerQuery中,有没有比递归更快、更有效的方法来从列表中查找最接近的匹配值?

在M/PowerQuery中,除了递归,还有其他方法可以更快、更有效地从列表中查找最接近的匹配值。

一种方法是使用内置的函数来实现。在PowerQuery中,可以使用List.Sort函数对列表进行排序,然后使用List.FirstN函数获取排序后的列表中的前几个元素。接下来,可以使用List.Min函数找到最接近的匹配值。

另一种方法是使用二分查找算法。二分查找是一种高效的查找算法,适用于有序列表。首先,需要对列表进行排序。然后,可以使用二分查找算法来查找最接近的匹配值。

以下是使用这两种方法的示例代码:

方法一:使用内置函数

代码语言:txt
复制
let
    sourceList = {1, 5, 3, 9, 7, 2, 4, 6, 8},
    targetValue = 5,
    sortedList = List.Sort(sourceList),
    closestValues = List.FirstN(sortedList, 3),
    closestMatch = List.Min(closestValues, (x) => Number.Abs(x - targetValue))
in
    closestMatch

方法二:使用二分查找算法

代码语言:txt
复制
let
    sourceList = {1, 5, 3, 9, 7, 2, 4, 6, 8},
    targetValue = 5,
    sortedList = List.Sort(sourceList),
    binarySearch = (list as list, target as number) =>
        let
            low = 0,
            high = List.Count(list) - 1,
            closestMatch = null
        in
            while low <= high do
                let
                    mid = Number.RoundDown((low + high) / 2),
                    midValue = list{mid}
                in
                    if midValue = target then midValue
                    else if midValue < target then
                        let
                            nextLow = mid + 1,
                            nextHigh = high
                        in
                            if closestMatch = null or Number.Abs(midValue - target) < Number.Abs(closestMatch - target) then
                                closestMatch = midValue,
                                low = nextLow,
                                high = nextHigh
                            else
                                high = mid - 1
                    else
                        let
                            nextLow = low,
                            nextHigh = mid - 1
                        in
                            if closestMatch = null or Number.Abs(midValue - target) < Number.Abs(closestMatch - target) then
                                closestMatch = midValue,
                                low = nextLow,
                                high = nextHigh
                            else
                                low = mid + 1,
                                high = nextHigh
        in
            closestMatch,
    closestMatch = binarySearch(sortedList, targetValue)
in
    closestMatch

这些方法都可以在PowerQuery中使用,以更快、更有效地从列表中查找最接近的匹配值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

哇塞,Python读取多个Excel文件竟然如此简单

方法1:文件夹获取文件——PowerQuery样式 Excel Power Query具有“文件夹获取数据”功能,允许我们加载特定文件夹中所有文件。我们可以用Python轻松地完成这项工作。...os库提供了与计算机操作系统交互方法,例如查找文件夹存在哪些文件。os.listdir()返回特定文件夹中所有文件名(字符串)列表。...os.path.join()提供了一种创建文件路径有效方法,可能情况下,应始终使用该方法,而不是folder+”\”+file。...使用Excel输入文件方法可能容易。编辑Excel输入文件Python编写代码来处理不同场景简单、更快。 但是,如果文件夹包含50个文件,其中20个是csv,我全部需要这些文件。...此时,我将使用文件夹获取文件方法,因为我们可以轻松地文件列表中选择所有.csv文件。 2.是否所有文件都位于同一文件夹

3.2K20

重学数据结构和算法(三)之递归、二分、字符串匹配

如果是,则直接列表取值返回,不需要重复计算,这样就能避免刚讲问题了。...二分查找变形 十个二分九个错 上一节讲只是二分查找中最简单一种情况,不存在重复元素有序数组查找等于给定元素。...我们把主串长度记作 n,模式串长度记作 m。因为我们是主串查找模式串,所以 n>m。...BF 算法思想可以用一句话来概括,那就是,我们主串,检查起始位置分别是 0、1、2…n-m 且长度为 m n-m+1 个子串,看有没有跟模式串匹配(看图)。 ?...十进制表示法,一个数字是通过下面的方式计算出来。对应到二十六进制,一个包含 a 到 z 这 26 个字符字符串,计算哈希时候,我们只需要把进位 10 改成 26 就可以。

65630

VLookup及Power Query合并查询等方法大量多列数据匹配效率对比及改善思路

以下用一个例子,分别对比了四种常用数据匹配查找方法,并在借鉴PowerQuery合并查询思路基础上,提出一个简单公式改进思路,供大家参考。...)并计算时间,结果如下表所示: 运行用时来看: VLookup函数和Index+Match函数效率基本一样; Lookup函数大批量数据查找效率最低,甚至不能忍受; Power Query效率非常高...那么,如果我们公式也可以做到只匹配一次,后面所需要取数据都跟着这次匹配结果而直接得到,那么,效率是否会大有改善呢?...再回头看Index+Match结合公式,其中,Match函数用于确定所需要查找内容位置,而Index用于提取该位置相应!...七、结论 批量性匹配查找多列数据情况下,通过对Index和Match函数分解使用,先单独获取所需要匹配数据位置信息,然后再根据位置信息提取所需多列数据,效率明显提升,所需匹配提取列数越多,

3.5K20

【MySQL 文档翻译】理解查询计划

它按照 MySQL 处理语句时读取它们顺序排列. 这意味着 MySQL 第一个表读取一行, 然后第二个表中找到匹配行, 然后第三个表, 以此类推...., 该表读取具有匹配索引所有行....仅索引扫描通常仅索引扫描更快, ALL 因为索引大小通常小于表数据.- 使用索引读取以按索引顺序查找数据行来执行全表扫描....通过合并半连接 (semijoins) 和反连接 (antijoins), 优化器可以自由地重新排序执行计划表, 某些情况下会产生更快计划....也就是说, EXPLAIN 输出前一行键被缓冲, 匹配出现行所代表批量提取, 显示 `Using join buffer`. JSON 格式输出, using\\_join

2.1K20

常用编程思想与算法

二分查找   二分查找是一种算法,其输入是一个有序元素列表,如果要 查找元素包含在列表,二分查找返回其位置;否则返回Null。   ...递归   递归指的是调用自己函数,递归只是让解决方案清晰,并 没有性能上优势。实际上,在有些情况下,使用循环性能更好。...Leigh CaldwellStack Overflow上说一句话:“如果使用循环,程序性能可能更高;如果使用递归,程序可能 容易理解。如何选择要看什么对你来说更重要。”   ...首先,数组中选择一个元素,这个元素被称为基准;   接下来,找出基准元素以及基准元素。   再对这两个子数组进行快速排序,直到满足基线条件。...广度优先工作原理图   要看你认识的人中有没有芒果销售员,朋友开始查每查一个朋友就把他朋友加入你查找列表队列末尾,直到查完为止或者找到第一个芒果销售员。

78910

PQ获取TABLE单一作为条件查询MySQL返回数据

(前提,数据库中有所有人全部记录。) 常规思路是,直接在数据库查找这个人,按条件返回即可,只不过还得写一个导出到文件,然后打开文件复制到原来,说实话还真有点繁琐。...为简化模型,我们采用下面的数据来讲解: 比如我们要查询的人是moon,那么首先在powerquery编辑器右键moon然后深化: 这样就得到了显示:moon。...我们到查询编辑器中看看: 注意第三行: NAME = 更改类型{1}[NAME], M语言允许我们通过坐标的方式获取表单一,[NAME]代表NAME列,而{1}代表第2行,因为表都是标号为0行开始...那Power Query中有没有可能设置主键呢?...UI上并没有设置位置,但是我们还是可以想其他办法,有这么几种方式: 1.带有主键数据库中导入数据 2.pq对table某一列去重,那么这一列就可以作为主键 3.使用Table.AddKey

3.5K51

基于红黑树TreeMap使用

--左子树当前节点小,右子树当前节点大 所以使用TreeMap对象都需要实现Comparable接口,否则会直接Crash,或者TreeMap传入Comapretor对象,通过该比较器进行比较...,而在该接口compareTo返回结果为: 返回 0:代表相同节点 返回 -1:代表当前节点传入节点小,会往左子树递归遍历 返回 1:代表当前节点传入节点大,会往右子树递归遍历 而在TreeMap...返回Value为空,因为remove前更新了time,所以time会比原来自平衡时候大,导致compare时候,本应该compareTo为-1往左子树查找,结果却是compareTo为...,也就是最小节点 LastKey会递归找到最右子节点,也就是最大节点 ?...firstKey&&lastKey higherKey和lowerKey higherKey作用是:返回传入Key大一点最接近Key lowerKey作用是:返回传入Key小一点最接近

1K60

个人永久性免费-Excel催化剂功能第22波-Excel文件类型、密码批量修改,补齐PowerQuery短板

一些短板功能,让多工作薄合并汇总在PowerQuery上能够顺畅地运行。...原生功能,具体位置【数据】选项卡内。...、文件夹名、表名等操作,可轻松PowerQuery可视化界面完成修改。...同时PowerQuery数据结果是以数据连接方式存储具体数据处理步骤,即只需点击【刷新】按钮,即可重新按原来数据处理逻辑,重新原始数据读取数据到目标表,此过程无需其他额外操作即可完成。...数据读取速度更快PowerQuery读取原数据,是以数据驱动形式读取,非一般插件通过打开工作薄,读取单元格,赋值给数组、再数组返回给单元格等步骤,保守估计PowerQuery读取速度更快一些。

1.1K30

VLookup等方法大量多列数据匹配效率对比及改善思路

以下用一个例子,分别对比了四种常用数据匹配查找方法,并在借鉴PowerQuery合并查询思路基础上,提出一个简单公式改进思路,供大家参考。...)并计算时间,结果如下表所示: 运行用时来看: VLookup函数和Index+Match函数效率基本一样; Lookup函数大批量数据查找效率最低,甚至不能忍受; Power Query效率非常高...那么,如果我们公式也可以做到只匹配一次,后面所需要取数据都跟着这次匹配结果而直接得到,那么,效率是否会大有改善呢?...再回头看Index+Match结合公式,其中,Match函数用于确定所需要查找内容位置,而Index用于提取该位置相应!...七、结论 批量性匹配查找多列数据情况下,通过对Index和Match函数分解使用,先单独获取所需要匹配数据位置信息,然后再根据位置信息提取所需多列数据,效率明显提升,所需匹配提取列数越多,

3.7K50

构建可以查找相似图像图像搜索引擎深度学习技术详解

本文中将介绍如何查找相似图像理论基础并且使用一个用于查找商标的系统为例介绍相关技术实现,本文提供有关在图像检索任务中使用推荐方法背景信息。...ArcFace主要思想是通常交叉熵添加一个缩进 m,它可以使同类图像嵌入分布该类质心区域中心周围,以便它们都与其他类嵌入集群分开最小角度 m。...上图展示了具有单类和多类标记时选择损失函数推荐(如果没有标记也可以通过计算样本多标签向量之间交集百分后者派生成匹配标记)。...,其中每个窗口激活是每个通道独立取这个窗口最大。...k-reciprocal k最近邻接近查询。因此可以粗略地将 k-reciprocal 集中元素视为已知正样本,并更改加权规则。

97920

数据库信息速递 AI推动数据库发展10种方法 (译)

2 查询模式 将向量添加到数据库带来不仅仅对于开发者是方便, 新查询功能不仅仅可以搜索精确匹配还可以找到“最接近,这对于实现推荐引擎或异常检测等系统是非常有帮助向量空间中嵌入数据简化了涉及匹配与关联到纯粹几何距离难搞问题...3 更强自荐功能 基于矢量查询系统以前查询系统更有意思,旧查询会寻找匹配项而新的人工智能驱动数据库会让你有感觉是解读用户想法。...现在向量数据库旨在创建有效涵盖向量中所有索引,我们需要弄清楚查找彼此“邻近”向量所有可能性。...6 更好性能 数据库可以处理数据存储细节,之前程序员需要花时间去研究数据库使用各种参数和模式,以使它们有效地运行。...8 欺诈识别 数据库存储数据让其安全是机器学习需要功能,例如有些工作就是使用机器学习算法来查找数据源异常,因为这些异常情况可能是欺诈迹象。

14320

整理得吐血了,二叉树、红黑树、B&B+树超齐全,快速搞定数据结构

>=2也不一定像AVL树一样为了保持平衡而旋转 AVL树结构主要是围绕节点与左右子树高度来保持平衡节点角度考虑自然红黑树平衡,且搜索时AVL效率更高,但插入与删除较多时AVL树旋转操作会比红黑树更多...搜索 B-树搜索类似于搜索二叉树,算法与递归算法相似。B树,搜索过程也是根节点开始,通过与节点key比较进行搜索,搜索操作时间复杂度为O(log n)。...节点nk之前子节点kln(key left node)键数至少有m/2个,则在kln节点中查找最接近k键k0,将k0替换k,结束删除操作。...节点nk之前子节点kln键数少于m/2个,且k后子节点krn(key右侧节点)键数至少有m/2个,则在krn节点中查找最接近k键k0,将k0替换k,结束删除操作。...下移后父节点np.key数必然少于m/2-1,np其父节点ng获取最接近下移np.key键ng.key c. ng.key下移后会导致ng与np节点相连key缺失,根据BST规则父节点keynp

2.5K20

USING INDUCTION TO DESIGN 使用归纳法设计算法【全文翻译】

(事实上我们称这种方法为归纳而不是递归,从而淡化递归实现概念)很多情况下,迭代也很容易,甚至尽管算法设计我们心里想是使用归纳法(递归),但迭代却更有效率。...(这其实是一个直接比较每两点算法)我们想找到一个更快解法。 一种分治算法 归纳假设如下所示 归纳假设:我们已经知道平面上如何去查找少于n个点中任意两点之间最短距离。...由假设知 M <n,同时由于任意一条边自己就是一个匹配显然有 M ≥1。既然M不是完全(不包括所有的点),那么就存在至少两个不相邻点v1和v2不被包含在M(即它们不对应M一条边)。...由于M数目小于n而且v1到v2有2n条边与之相连,M至少有一条边,假定为(u1,u2),与v1到v2三条边相连。...那么我们就可以使用逆向归纳法覆盖n所有。这是一种有效证明技巧,因为对于每个n取值基本集中都存在一个其大(由于集合式无限)。

44920

干货|Spark优化之高性能Range Join

而对于一个Range(150, 310),示意图中也可以得到可能匹配Rows——R3和R4,那么是如何通过算法来进行查找呢? 1)点查找一个数据(如Point(108)) A....采用二分查找算法,“Keys”中找到108小又最接近Key:3->100; B. “activeRows”中找到下标3对应Row:R1和R2; C. 得到最终结果为R1和R2。...2)匹配一个Range(如Range(150, 310)) A. 采用二分查找算法,Keys中找到150小又最接近Key:6->140; B....“activeRows”中找到下标6对应Row:R3; C. “Keys”中找到310小又最接近Key:8->300; D....采用二分查找算法,“Keys”中找到300小又最接近Key:3->200; B. “Keys”中找到600小又最接近Key:5->500; C.

1.6K10

文件系统特殊命令一览表

. #5.采用递归和通配符进行查询指定目录和所有子目录得文件 dir *.exe /S #6.批处理可以使用批量后缀名查找指定目录文件 @dir > 1.txt /s /a /b d:\*.mp4...按默认,如果达到默认最大内存,排序会一次完成(非临时文件);否则,排序会分两次完成(没有完全排序数据存储临时文件);用于排序和合并内存量相等。...,搜索是在当前目录和 PATH 环境变量指定路径执行 基础语法: WHERE [/R dir] [/Q] [/F] [/T] pattern#模式 #参数列表: /R 指定目录开始,递归性搜索并显示符合指定模式文件...只打印不包含匹配行 /N 匹配每行前打印行数 /M 如果文件含有匹配项,只打印其文件名 /O 每个匹配行前打印字符偏移量 /P.../A:0A /F:file 指定文件读文件列表 (/ 代表控制台) /D:dir 查找以;分号为分隔符目录列表 /G:file 指定文件获得搜索字符串 (/ 代表控制台

3.6K30

5 款可替代 du 命令工具!

当文件占用磁盘空间 80 % 且暂时无法扩容空间情况下,我们可以找出系统磁盘空间较大具体目录下文件进行清理,只需执行如下命令即可查看文件夹占用空间大小。...Ubuntu 21.10 安装 duu: 安装 duu 工具之前需要先确保系统有没有安装 Python 3 环境,没有的话需要安装一下,有的话忽略即可,不过目前大多数 Linux 发行版默认软件仓库都是有...-N:不递归 -f:显示每个目录文件数 -S:显示均值、中值、众数和标准差文件统计信息 -H:以更易读格式显示数字 -T:并发线程数,考虑 SAN -x:排除不分大小写字符串冒号分隔列表 -X...,以更好输出、清晰命令和默认,而且由于多线程,它甚至可以计算大目录下大小时会比 du 命令运行得更快,tin-summer 与 du 命令之间区别是前者读取文件大小,而后者则读取磁盘使用情况...: # sn ar -t200M 获取 $DIR 10 个最大目录排序列表,可执行如下命令: # sn sort $DIR -n12 sn 实际操作大目录时候速度比较快,操作小目录时候

1.1K30

精通数组公式17:基于条件提取数据(续)

图10:使用AGGREGATE函数公式提取满足条件记录 示例:从一个查找返回多个 Excel,诸如VLOOKUP、MATCH、INDEX等标准查找函数不能够从一个查找返回多个,除非使用数组公式...下面是一个示例,如下图11所示,单元格D3查找,需要从列B中找到相应并返回列A对应。 ?...图14:MOD函数使用来提取仅能被5整除数据 示例:提取列表2有而列表1没有的数据项——列表比较 如下图15所示,对两个列表进行比较并提取数据。 1.获取列表2但不在列表1姓名。...使用OR条件时要注意:对于单个列上OR条件操作,ISNUMBER/MATCH组合布尔OR加计算容易创建且运算更快;对于多列上OR条件操作,记住要考虑大于1计数。...4.有两种有用方法来考虑数据提取公式:提取匹配一组条件记录或数据;单个查找返回多个数据。 注:本文为电子书《精通Excel数组公式(学习笔记版)》一部分内容节选。

3.3K10

近邻搜索算法浅析

构建过程 确定split域(轮询 or 最大方差) 确定Node-data(中位数 or 平均值) 确定左子空间和右子空间 递归构造左右子空间  查询过程 进行二叉搜索,找到叶子结点 回溯搜索路径...叶子节点记录原始数据节点,中间节点记录分割超平面的信息  搜索过程 根节点开始比较,找到叶子节点,同时将路径上节点记录到优先级队列 执行回溯,从优先级队列中选取节点重新执行查找 每次查找都将路径未遍历节点记录到优先级队列...query划分子向量,计算子向量和对应段所有簇心距离,得到距离表(m×k*矩阵) 遍历样本库向量,根据距离表,计算每个样本与查询向量距离和返回k个距离最接近样本 距离计算 SDC(symmetric...HNSW NSW算法之上进行改进基于图算法,使用分层结构,每层通过启发式方法来选择某节点邻居(保证全局连通性),使其构成一张连通图。...,ep开始查找距离待插元素 最近ef个节点,从中选出M个与待插节点连接,并将这M 个节点作为下一层输入; l-1~0层,每层执行操作:M个节点开始搜索,找到距离与待插节点最近ef个节点,并选出

2.8K104

visualgo学习与使用

当(整数)数组 A 有序时,涉及 A 许多问题变得简单(至少原本简单): 在数组 A 搜索特定 v, 查找(静态)数组 A 最小/最大/第 k 个最小/最大, 测试唯一性并删除数组 A 重复项...二叉搜索树 二叉搜索树是一种基于二分查找思想数据结构,它具有良好查找和插入性能。一个二叉搜索树,每个节点都比其左子树所有节点大,其右子树所有节点小。 ---- 7....它可以O(log n)时间内完成这些操作,暴力算法更加高效。 ---- 11. 递归树/有向无环图 递归树和有向无环图是用于分析递归算法复杂度工具。...它可以O(m)时间内完成字符串匹配操作,其中m为模式串长度。 ---- 17. 后缀数组 后缀数组是一种用于处理字符串排序和匹配数据结构。...它可以O(m√n)时间内完成匹配操作,其中m为边数,n为节点数。 ---- 22. 最小顶点覆盖 最小顶点覆盖是指在一个无向图中,找到一个包含所有边所连接节点最小节点集合。

24110
领券