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

在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.4K20

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

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

71230
  • 解读向量索引

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

    40810

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

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

    2.2K20

    常用编程思想与算法

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

    82010

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

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

    5K20

    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值小一点最接近的

    1.1K60

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

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

    5.3K50

    向量处理:了解搜索领域的这场新革命

    – Nyah Macklin 语义搜索还可以从已知的用户信息中获得更多上下文。用户的搜索历史或位置可以提供更多关于他们意图的线索——例如,“足球”在美国和英国的含义完全不同。...例如,在图像识别中,可以将图像转换为向量,从而进行相似性搜索以查找具有相似内容或特征的图像。 向量:语义搜索的基石 向量本质上是一个数字列表,表示大小和方向。此列表中的元素数量定义了它的维度。...这篇论文介绍了一种新的模型,称为Word2Vec,它可以有效地将单词和短语转换为密集向量,从而捕捉它们的语义关系。具有相似含义的单词在向量空间中彼此更接近,而不同的单词则相距较远。...向量匹配:在多维空间中搜索 为了有效地利用嵌入进行语义搜索,出现了被称为向量数据库的专用数据库,例如Pinecone和开源Milvus提供的数据库。 向量支持也正在快速添加到传统数据库中。...然后,向量数据库执行相似性搜索以查找其向量最接近查询向量的电影,从而有效地推荐与用户偏好匹配的电影。

    12510

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

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

    21110

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

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

    1.2K30

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

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

    1.1K20

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

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

    3.1K21

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

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

    19720

    Java并发编程学习18-线程池的使用(递归算法的并行化改进)

    串行递归转并行递归 在递归的算法中通常都会存在串行循环,这就可以用上面 1 中的方式进行并行化。...如果在每个迭代操作中,都不需要来自后续递归迭代的结果,那可以参考下面的 parallelRecursive 方法来对递归进行并行化改进: public class Process { /**...调用者能够判断这个值是否已经被设置,以及阻塞并等候它被设置。在第一次调用 setValue 时,将更新解答方案,并且 CountDownLatch 会递减,从 getValue 中释放主线程。...那么并发场景下,如果没有解答,有没有什么方法可以结束程序呢? 有一种方法就是记录活动任务的数量,当该值为零时将解答设置为 null。...我们知道,真实解题时,找到解答的时间可能比等待的时间要长,因此在解答器中还需要包含下面的结束条件: 时间限制。

    12621

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

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

    48820

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

    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.4K30
    领券