我希望在 Excel 列中搜索与我输入的序列最相似的序列。
例如,在下面的示例中,我提供的序列是:1, 2.5, 3.5, 2.5, 1。它在下图中显示为黑色。
在我正在搜索的列中,有一些序列。与我最相似的是蓝色。结果是:1、2、3、2、1。
你们中有人知道一个 Excel 公式或一系列公式和步骤吗?它可以让 Excel 确定这一点——例如,当我输入黑色序列时,它会将其与蓝色序列相匹配,作为最相似的一个?
感谢this堆栈溢出答案,我已经知道如何使用以下公式搜索一组数字的精确序列:
=MATCH([条件 1]&[条件 2],[数据第一个值]:[数据最后一个值]&[数据第二个值]:[数据最后一个 + 1 个值],0)
例如,如果我有以下数字:1, 3, 5, 1, 4,并且我希望找到序列 1, 4,这个公式将引导我在这组数字中找到它。
我也已经知道如何使用以下公式找到与我输入的数字最接近的匹配项(如果您查看下面的示例图片,这会更有意义): =INDEX($A$1:$A$10,MATCH (MIN(ABS(C1-B1:B10)),ABS(C1-$B$1:$B$10),0))
当我按 control+shift+enter 时,该公式将生成数字 4,表示第 4 行,因为我在 C1 中输入的数字 39 最接近位于第 4 行的数字 40 .
所以我拥有这两个组件 - 找到精确的序列,并找到最接近的数字 - 但现在的问题是,我如何组合这两个公式来向我显示最接近的数字数字序列,如果在图表上绘制,看起来最相似的数字序列,就像我的第一个带有蓝色和黑色线的示例一样?
如果您不仅可以帮助找到最接近的序列,而且可以按照从最相似到最不相似的顺序找到最接近的序列,还会获得奖励分。
再一次,我不需要将其整合到一个公式中;我很高兴手动执行几个步骤和不同的公式来得出答案。
如果您认为通过其他方式可以更好地解决这个问题,请告诉我!但我没有任何编码经验,因此我认为 Excel 是我最好的选择。
非常感谢!!!
最佳答案
不确定您到底是如何设置的,但如果我在表格中可视化您的图表,您可以使用以下内容(如果有 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)))
编辑2:
要使其更加动态,您可以使用:
=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。
关于arrays - 如何在 Excel 中搜索最相似的序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66490076/