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

How do I search for most similar sequence in Excel?

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

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

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

Graph

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

感谢 Stack overflow answer,我已经知道如何使用以下公式在一组数字中搜索精确序列:

=MATCH([条件 1]&[条件 2],[数据第一个值]:[数据最后一个值]&[数据第二个值]:[数据最后一个值 + 1 个值],0)

例如,如果我有以下数字:1、3、5、1、4,我希望找到序列 1、4,此公式将引导我找到那组数字中的它.

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

Example

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

所以我有两个组成部分——找到确切的序列,并找到最接近的数字——但现在的问题是,我如何组合这两个公式来告诉我最接近的数字序列,如果像我第一个例子中那样用蓝线和黑线绘制在图表上,看起来最相似的那个?

如果您不仅可以帮助找到最接近的序列,而且可以帮助找到最接近的 序列 (按照最相似到最不相似的顺序),则可以加分。

再说一遍,我不需要将其整合到一个公式中;我很高兴手动完成几个步骤和不同的公式来得出答案。

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

非常感谢!!!

不确定你是如何设置的,但如果我在 table 中可视化你的图表,你可以使用下面的(如果有 Microsoft365):

H2中的公式:

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

所有数据都在一个列中,您可以在下面找到一个示例,说明您是否有 5 个序列。

C2中的公式:

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

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

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

如果您可以访问 LET() 会更好,只需更改范围参考即可小菜一碟:

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

EDIT2:

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

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

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

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

这个公式是:

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

其中[inputrange]是你输入的范围(下图红色,$C$6:$G$6),[colorrange]是那个颜色的范围(蓝色,C2:G2 ).

差异最小的颜色是匹配的:

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

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