在Google Sheets中用布尔OR生成CxA表格的单单元格公式求解
Google Sheets 单单元格布尔矩阵OR运算公式实现
我需要在Google Sheets中编写一个直观的单单元格公式,已知两个布尔值表格(维度分别为AxB、CxB),按照布尔OR规则生成对应的CxA表格。尝试过map、byrow、bycol或scan函数,但在矩阵操作上遇到了困难。
逻辑示例
R对应[a,e]为真;a对应[1,2,3,6]为真;e对应[3,4,6]为真,因此R对应[1,2,3,4,6]为真。
输入矩阵
AxB矩阵
| AxB | R | B | G | K |
|---|---|---|---|---|
| a | 1 | 0 | 0 | 0 |
| b | 0 | 0 | 0 | 1 |
| c | 0 | 1 | 1 | 0 |
| d | 0 | 1 | 0 | 0 |
| e | 1 | 1 | 0 | 0 |
CxB矩阵
| CxB | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| a | 1 | 1 | 1 | 0 | 0 | 1 |
| b | 0 | 0 | 1 | 0 | 1 | 0 |
| c | 0 | 1 | 0 | 1 | 1 | 0 |
| d | 1 | 1 | 0 | 1 | 1 | 0 |
| e | 0 | 0 | 1 | 1 | 0 | 1 |
期望输出矩阵
CxA矩阵
| CxA | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| R | 1 | 1 | 1 | 1 | 0 | 1 |
| B | 1 | 1 | 1 | 1 | 1 | 1 |
| G | 0 | 1 | 0 | 1 | 1 | 0 |
| K | 0 | 0 | 1 | 0 | 1 | 0 |
解决方案公式
假设AxB矩阵的数值区域为B2:E6(即去掉第一列标签后的部分),CxB矩阵的数值区域为H2:M6(去掉第一列标签后的部分),使用以下单单元格公式即可生成目标矩阵:
=--(MMULT(TRANSPOSE(B2:E6), H2:M6) > 0)
如果需要保留标签并让公式更易读,可以用LET函数封装变量:
=LET( axb_data, B2:E6, cxb_data, H2:M6, transposed_axb, TRANSPOSE(axb_data), product_matrix, MMULT(transposed_axb, cxb_data), --(product_matrix > 0) )
公式说明
TRANSPOSE(B2:E6):将AxB的数值矩阵转置,把原来的5行4列(a-e对应R/B/G/K)转换为4行5列(R/B/G/K对应a-e),匹配矩阵乘法的维度要求。MMULT(...):执行矩阵乘法,得到的每个元素是对应行(比如R)与列(比如1)的乘积之和。这个和的意义是:R对应的所有为真的行(a、e)在CxB矩阵的1列中,有多少个为1。--(product_matrix > 0):将乘积和大于0的结果转换为1(布尔真),等于0的转换为0(布尔假),完美匹配布尔OR的逻辑——只要有一个为真,结果就为真。
内容的提问来源于stack exchange,提问作者Konchog
相关产品推荐
相关产品推荐

