如何在 Excel 中搜索最相似的序列?

问题描述

我希望在 excel 列中搜索与我输入的序列最相似的序列。

例如,在下面的示例中,我提供的序列是:1,2.5,3.5,1。它在下图中被描绘为黑色。

在我搜索的列中,有几个序列。与我最相似的是蓝色。它是:1,2,3,1。

Graph

你们中的任何人都知道一个 excel 公式,或一系列公式和步骤,它可以让 Excel 确定这一点 - 例如,当我输入黑色序列时,它将与蓝色序列匹配作为最相似的一个

感谢this堆栈溢出答案,我已经知道如何使用以下公式在一组数字中搜索精确序列:

=MATCH([Criteria 1]&[Criteria 2],[Data 1st val]:[Data last val]&[Data 2nd val]:[Data last + 1 val],0)

例如,如果我有以下数字:1,5,1,4,并且我希望找到序列 1,4,则此公式将引导我在该组数字中找到它。

我也已经知道如何使用这个公式找到与我输入的数字最接近的匹配项(如果您查看下面的示例图片会更有意义):=INDEX($A$1:$A$10,MATCH (MIN(ABS(C1-B1:B10)),ABS(C1-$B$1:$B$10),0))

Example

当我按下 control+shift+enter 时,这个公式会产生数字 4,表示第 4 行,因为我在 C1 中输入的数字是 39,最接近数字 40,它位于第 4 行.

所以我有两个组成部分——找到精确的序列,并找到最接近的数字——但现在的问题是,我如何组合这两个公式来向我显示最接近的数字数字序列,如果像我在第一个带有蓝黑线的示例中那样绘制在图形上,看起来最相似的数字是什么?

如果您不仅能帮助找到最接近的序列,而且还能按照最相似到最不相似的顺序找到最接近的序列,那么还有奖励积分。

再说一次,我不需要将其合并为一个公式;我很高兴手动通过几个步骤和不同的公式来得出答案。

如果您认为以其他方式更好地解决此问题,请告诉我!但我没有任何编码经验,所以我认为 Excel 是我最好的选择。

非常感谢!!!

解决方法

不确定您究竟是如何设置的,但如果我在表格中可视化您的图表,您可以使用以下内容(如果有 Microsoft365):

enter image description here

H2 中的公式:

=INDEX(SORTBY(B2:F4,MMULT(ABS(B2:F4-B1:F1),SEQUENCE(5,0))),1)

将所有数据放在一列中,如果您有 5 的序列,您可以在下面找到一个示例。

enter image description here

C2 中的公式:

=TRANSPOSE(INDEX(SORTBY(INDEX(A2:A16,SEQUENCE(11,5)-ROUNDDOWN(SEQUENCE(11,5,0.2),0)*4),MMULT(ABS(INDEX(A2:A16,0)*4)-TRANSPOSE(B2:B6)),1))

如果您想让它适用于 A1:A500 中包含 10 个数字的序列的数据集:

=TRANSPOSE(INDEX(SORTBY(INDEX(A1:A500,SEQUENCE(COUNT(A1:A500)-9,10)-ROUNDDOWN(SEQUENCE(COUNT(A1:A500)-9,10,0.1),0)*9),MMULT(ABS(INDEX(A1:A500,0)*9)-TRANSPOSE(B1:B10)),SEQUENCE(10,1))

如果您可以访问 LET() 会更好,而只需更改范围引用即可:

=LET(X,A2:A500,Y,INDEX(X,SEQUENCE(COUNT(X)-9,10)-ROUNDDOWN(SEQUENCE(COUNT(X)-9,TRANSPOSE(INDEX(SORTBY(Y,MMULT(ABS(Y-TRANSPOSE(B2:B11)),1)))

EDIT2:

要使其更具动态性,您可以使用:

=LET(W,1,X,11,Z,SEQUENCE(COUNT(X)-(Y-1),Y)-ROUNDDOWN(SEQUENCE(COUNT(X)-(Y-1),1/Y),0)*(Y-1)),TRANSPOSE(INDEX(SORTBY(Z,MMULT(ABS(Z-TRANSPOSE(B2:INDEX(B:B,Y+1))),SEQUENCE(Y,W)))

其中“W”是第 n 个最接近的匹配,其中“Y”是序列的长度,示例中为 11。

,

我的方法是计算每种颜色和输入值之间的匹配值,例如每个点的差异之和。

这个公式是:

=SUM(IF([inputrange]<>"",ABS([inputrange]-[colorrange]),0))

其中 [inputrange] 是您输入的范围(下图中的红色表示,$C$6:$G$6),[colorrange] 是该颜色的范围(表示为蓝色,C2:G2)。>

enter image description here

差值最小的颜色为匹配:

=VLOOKUP(MIN([matchvalues],[rangeofmatchandcolors],2,0)

其中 [matchvalues] 是匹配值的范围(下图中的蓝色表示,单元格 A2:A4),而 [rangeofmatchandcolors] 是匹配值和颜色(表示为红色,A2:B4) strong text