Google 工作表中扩展行和列的多个标量积

Multiple scalar products of expanding rows and columns in Google Sheets

我想计算行 B1:1 与行 B2:2、B3:3、... 的标量积,并将结果放在 A 列中。我的数据可以有空单元格并且在列和行中都在增长,因此我想找到一个不需要手动将公式应用于每个新数据条目的解决方案。

我目前的解决方案在数学上符合我的要求。但是,每当 sheet 中的行数多于列数时,结果只计算列数,其余行保持为空。

=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1), N(TRANSPOSE(INDIRECT(CELL("address", B2)&":"&COLUMNS(2:2)))))))

添加空列目前有效,但我怎样才能解决这个问题而不必一直添加额外的列?

Example sheet

你说

I would like to calculate the scalar product of row B1:1 with row B2:2, B3:3, ..., and put the result in column A. ...without having to add extra columns all the time?

在您的公式中使用 max(arrayformula(if(B:B<>"",row(B:B),"")))
而不是 COLUMNS(2:2)

您的新公式将是

=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1), N(TRANSPOSE(INDIRECT(CELL("address", B2)&":"&max(arrayformula(if(B:B<>"",row(B:B),"")))))))))


有用的片段

如何找到列中的最后一个 non-empty 行号

=max(arrayformula(if(B:B<>"",row(B:B),""))) 

给出第 B 列中最后 non-empty 行的 行号,不考虑空单元格


编辑

请使用以下公式 MMULT 任意数量的行或列 基于仅 2 个单元格B1B2
(修改后的公式(由mz1000 in 给出)

=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1), 
                         N(TRANSPOSE(INDIRECT(CELL("address", B2)&":"&max(arrayformula(
                            if(INDIRECT(CELL("address", B2)&":"&ROWS(B:B))<>"", 
                                  row(INDIRECT(CELL("address", B2)&":"&ROWS(B:B))),"")))))))))