Matrix 计算不同列之间的相似度
我想计算谷歌电子表格中不同列的相似性百分比,但我不知道如何计算 在谷歌表单中,我有两张表单: 首先有一个表格,列出了几个(即将提出的)政治提案,以及一些政党如何投票支持这些提案。将手动添加每个投票值(是或否) 第二有一个区块矩阵,两个政党的%投票赞成相同的提案。在这张纸中,我从第一张纸开始计算各方与其他各方的相似性。或者:X中有多少次投票给完全相同的两个政党 一些例子:Matrix 计算不同列之间的相似度,matrix,google-sheets,Matrix,Google Sheets,我想计算谷歌电子表格中不同列的相似性百分比,但我不知道如何计算 在谷歌表单中,我有两张表单: 首先有一个表格,列出了几个(即将提出的)政治提案,以及一些政党如何投票支持这些提案。将手动添加每个投票值(是或否) 第二有一个区块矩阵,两个政党的%投票赞成相同的提案。在这张纸中,我从第一张纸开始计算各方与其他各方的相似性。或者:X中有多少次投票给完全相同的两个政党 一些例子: 甲方的投票次数与乙方完全相同,反之亦然。 我用于计算块矩阵中%的公式为=2/5 甲方与丙方进行了1次完全相同的投票,反之亦然
- 甲方的投票次数与乙方完全相同,反之亦然。 我用于计算块矩阵中%的公式为=2/5
- 甲方与丙方进行了1次完全相同的投票,反之亦然。我用来计算块矩阵中%的公式是=1/5
- 乙方的投票次数与丙方完全相同,反之亦然。我用于计算块矩阵中%的公式为=2/5
- 等等李>
如何提高效率?这可以通过矩阵乘法实现 这是我使用的公式:
=ArrayFormula(
(SUMPRODUCT(
MMULT(
(IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="Yes")*1;
TRANSPOSE(($B$2:$E$2>0)*1)
)*
MMULT(
(IF('Overview of votes by party'!$B$2:$E$2=$A3;'Overview of votes by party'!$B$3:$E$7)="Yes")*1;
TRANSPOSE(($B$2:$E$2>0)*1))
)+
SUMPRODUCT(
MMULT(
(IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="No")*1;
TRANSPOSE(($B$2:$E$2>0)*1)
)*
MMULT(
(IF('Overview of votes by party'!$B$2:$E$2=$A3;'Overview of votes by party'!$B$3:$E$7)="No")*1;
TRANSPOSE(($B$2:$E$2>0)*1)))
)/
(
COUNTIF('Overview of votes by party'!B:B;"Yes")+
COUNTIF('Overview of votes by party'!B:B;"No")
)
)
基本上,这个过程是:
IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="Yes")*1
及
(每个矩阵的维数为1 x)。这是通过将每个矩阵乘以一个单列矩阵来实现的,该矩阵由与#提案行数相同的所有1组成。i、 e:
MMULT(
(IF(..PartyA..)*1;
TRANSPOSE(($B$2:$E$2>0)*1)
)
及
SUMPRODUCT
(
COUNTIF('Overview of votes by party'!B:B;"Yes")+
COUNTIF('Overview of votes by party'!B:B;"No")
)
您可以在现场看到这一点。我复制了您的示例工作表,该工作表产生了相同的输出
公式位于“相似矩阵”表的单元格B3中 哇,谢谢你,Chancea!让我检查并测试一下你(和Chris Hick)的精彩代码/公式。非常感谢您快速友好的解决方案!哇,谢谢你,克里斯!让我检查并测试一下你(和Chancea)的奇妙代码/公式。非常感谢您快速友好的解决方案!
MMULT(
(IF(..PartyB..)*1;
TRANSPOSE(($B$2:$E$2>0)*1)
)
(
COUNTIF('Overview of votes by party'!B:B;"Yes")+
COUNTIF('Overview of votes by party'!B:B;"No")
)