excel公式如何建立相似度矩阵

标签 excel matrix similarity

我想创建一个公式,该公式将根据数据表创建相似度矩阵。以下是数据示例以及所需的输出。数据行表示模块化类算法的结果。我需要我的输出来计算两个国家共享相同类别值的月数(可以是任何值,只要它们相等)除以总月数。

输入模块化类别

        jan feb mar apr may
USA     0   1   2   4   3
UK      0   3   2   3   3
AU      0   2   2   2   3
CH      1   0   1   1   2
EG      2   3   0   0   1

输出相似度矩阵

      USA   UK   AU  CH  EG
USA   1             
UK   0.6    1           
AU   0.6    0.6  1      
CH    0     0    0    1 
EG    0     0.2  0    0   1

我没有尝试过任何公式,因为我不知道从哪里开始。我读过有关 countifs 和 mmult 的内容,但我不知道哪个最合适。

最佳答案

是的,有一种方法可以使用 SUM()IF()COUNT() 以及使用数组公式。

您可以使用的基本公式是(假设您的顶部数组是 A1:F6,包括标题,因此数据位于 A2:F6 中):

{=SUM(IF($B$2:$F$2=$B2:$F2,1,0))/COUNT($B$2:$F$2)}

使用数组公式,您可以使 IF() 函数在匹配时返回 1,在不匹配时返回 0,从而迭代一行中的每个元素。 SUM() 将匹配项相加,然后除以处理的单元格数量的 COUNT() 即可得出相似度指数。

上面的示例适用于示例中顶部的美国/美国单元格,您可以用它来填充,但每个新的对角线都需要调整以将固定行号更改为新行。因此,英国专栏的顶部将是:

{=SUM(IF($B$3:$F$3=$B3:$F3,1,0))/COUNT($B$3:$F$3)}

Conditional sum using array formulas

如果您提前知道有多少列/国家/地区,则可以删除 COUNT()

注意:您无需键入花括号。输入完公式后,您必须Ctrl-Shift-Enter 在编辑时,让它们出现并将公式视为数组公式。因此,这些公式通常称为CSE 公式(Ctrl-Shift-Enter)。

更新:

您也可以使用 INDIRECT()COLUMN() 填充单元格的单个公式来完成此操作。

{=SUM(IF(INDIRECT("$B$"&COLUMN(B2)):INDIRECT("$F$"&COLUMN(B2))=$B2:$F2,1,0))/COUNT(INDIRECT("$B$"&COLUMN(B2)):INDIRECT("$F$"&COLUMN(B2)))}

这利用了列号与行号相同的事实,提供了转置。

更新2:

实际上,可以消除 COUNT() 并将 SUM() 替换为 AVERAGE(),因为所有匹配项均为 1,即平均值是正确的值。

所以这适用于所有单元格:

{=AVERAGE(IF(INDIRECT("$B$"&COLUMN(B2)):INDIRECT("$F$"&COLUMN(B2))=$B2:$F2,1,0))}

更新3:

如果您非常需要在上对角线上不显示任何内容,从而制作一个下三角 block ,那么您可以使用 IF() 包装上述公式,检查该列是否更大比该行并使单元格为空白在这种情况下。然后,您可以用公式填充整个 block ,它将看起来正确,无需删除。

{=IF(COLUMN(B2)>ROW(B2),"",AVERAGE(IF(INDIRECT("$B$"&COLUMN(B2)):INDIRECT("$F$"&COLUMN(B2))=$B2:$F2,1,0)))}

关于excel公式如何建立相似度矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496654/

相关文章:

java - 使用 POI 获取 Excel 单元格的实际单元格值,无需定义数据类型

c++ - 查找 GSL 矩阵中的行数/列数?

android - android.opengl.matrix 中 setRotateM 函数背后的数学原理是什么?

similarity - 新闻项相似度(主题)算法

algorithm - 找到两个矢量形状的相似性

image - 使用 OpenCV 检查图像的相似性

excel - 如何通过网络向 IOS9 提供 Excel 电子表格?

vba - Do While Not IsEmpty(Range ("A1")) 条件评估失败

vba - 选择从 3 到 305 的所有奇数行

R生成具有定义行数和列数的简单整数矩阵