首页
学习
活动
专区
工具
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.3K20

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

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

70030
  • 解读向量索引

    查找相关性条目 精准匹配,按检索 结构 特别是树和图 B树系列,哈希表,倒排索引 用例 多媒体搜索,推荐系统,NLP任务 数据库查询、文本搜索过滤 aa 2....这种结构化向量排列允许用户更快地进行搜索查询。当一个新查询到来时,系统不会遍历整个数据集,而是首先标识出最接近或最相似的集群,然后在这些集群中进行搜索以找到特定文档。...IVFFLAT 旨在优化搜索速度和准确性之间平衡。 每个集群,向量存储一个简单列表或数组,没有额外细分或层次结构。...要在跳过列表搜索数据点,我们最高层开始,从左到右搜索每个数据点。在任何时候,如果查询大于当前数据点,我们将返回到下一层前一个数据点,从左到右继续搜索,直到找到确切点。...中等规模数据集(1M至10M个向量):在这个数据量级上,将IVF与HNSW聚类相结合是一个有效策略。这种方法可以保持较高精度同时,合理分配计算资源,达到效率和性能之间良好平衡。

    11110

    常用编程思想与算法

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

    81610

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

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

    2.2K20

    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

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

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

    4.7K20

    基于红黑树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.2K30

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

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

    4.9K50

    如何让PostgreSQL向量数据速度与Pinecone一样快

    我们公告文章,我们描述了我们新 StreamingDiskANN 向量索引如何让我们比为此目的创建定制专用数据库(如 Pinecone)更快地执行向量搜索。...我们将介绍我们做出三项技术改进: 实现 DiskANN 算法,允许将索引存储 SSD 上,而不是必须驻留在内存。由于 SSD RAM 便宜得多,因此这极大地降低了存储大量向量成本。...图 1 说明了使用 hnsw.ef_search=5 查找与给定查询最接近两个向量并且匹配标签“department=engineering”时遇到此问题。...在此场景,具有正确标签第一个项目是与查询最接近第七个向量。 由于向量搜索仅返回最接近五个项目,并且没有一个与标签过滤器匹配,因此不会返回任何结果!...一个具有 768 个维度数据集代表性示例,从一位编码切换到两比特编码时,召回率 96.5% 提高到 98.6%,如此高召回率水平下,这是一个显著改进。

    15110

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

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

    1.1K20

    整理得吐血了,二叉树、红黑树、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.9K20

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

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

    18420

    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取值基本集中都存在一个其大(由于集合式无限)。

    47920

    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.3K30

    文件系统特殊命令一览表

    . #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.8K30

    干货|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.7K10

    Java初学者30个常见问题

    在下面的例子,第一段代码是合法,第二段代码会引发编译错误。技术角度说,那一条语句是一个变量声明,而不是语句,所以会报错。 Q. 在下面的两段代码里,有没有情况,它们效果不一样? A. 有的。...递归代码创建大数据类型(比如数组)时需要额外注意,随着递归推进,内存使用将会迅速增加,由于内存使用增加,操作系统管理内存时间开销也会增加。 4.2 排序与查找 Q....Knuth 教授 1946年就发表了二分查找论文,但是第一个正确二分查找程序 1962年在出现。 Q. JAVA内建库中有没有排序和查找函数? A. 有的。...因为基本类型是传递,快速排序归并排序更快而且不需要额外空间。 Q. 为什么JAVA库不用 随机pivot方式快速排序? A. 好问题。 因为某些程序员调试代码时,可能需要确定性代码实现。...可以(虽然 数组并没有实现 Iterator 接口)。请参考下面的代码: Q. linked list 上使用 iterator 是不是循环或者递归有效率? A.

    1.8K51
    领券