Excel/LO Calc/谷歌表格中列对处理后向量的标量积实现问题
跨Excel、LO Calc与谷歌表格的解决方案
需求回顾
数据按列对(奇数列+后续偶数列)排列:
- 首行仅取奇数列的值作为权重
- 其余行对每列对执行自定义双输入函数
foo,再将结果与对应首行权重计算标量积(加权求和)
示例对应公式:=A$1*foo(A2,B2)+C$1*foo(C2,D2)+E$1*foo(E2,F2),实际为50行24列(12组列对)。
Excel & LO Calc 兼容方案
优先支持这两个工具,分两种场景:
1. 手动列对(适合少量列对)
直接按示例公式扩展,24列时的完整公式如下,下拉即可应用到所有行:
=A$1*foo(A2,B2)+C$1*foo(C2,D2)+E$1*foo(E2,F2)+G$1*foo(G2,H2)+I$1*foo(I2,J2)+K$1*foo(K2,L2)+M$1*foo(M2,N2)+O$1*foo(O2,P2)+Q$1*foo(Q2,R2)+S$1*foo(S2,T2)+U$1*foo(U2,V2)+W$1*foo(W2,X2)
2. 数组公式(适合大量列对,自动适配)
针对24列(12组列对),用数组公式自动生成列索引,无需手动罗列所有列对:
=SUM(INDEX($1:$1,,ROW(INDIRECT("1:12"))*2-1)*foo(INDEX(A2:X2,,ROW(INDIRECT("1:12"))*2-1),INDEX(A2:X2,,ROW(INDIRECT("1:12"))*2)))
- 输入方式:旧版Excel/LO Calc需按
Ctrl+Shift+Enter确认数组公式;Excel 365/LO Calc 7.5+可直接回车,公式自动溢出到下方行 - 参数说明:
12是列对总数(24÷2),A2:X2是当前行的全列数据范围
自定义函数foo注意事项
- 若使用数组公式,
foo需支持数组输入(Excel UDF需添加Application.Volatile或处理数组参数;LO Calc宏函数需启用数组运算) - 基础场景下(如示例中
foo(x,y)=x*y),可直接替换为对应运算,无需自定义函数:=SUM(INDEX($1:$1,,ROW(INDIRECT("1:12"))*2-1)*INDEX(A2:X2,,ROW(INDIRECT("1:12"))*2-1)*INDEX(A2:X2,,ROW(INDIRECT("1:12"))*2))
谷歌表格方案
利用SEQUENCE生成列索引,结合ARRAYFORMULA实现数组运算:
=SUM(INDEX(1:1,,SEQUENCE(12,1,1,2))*ARRAYFORMULA(foo(INDEX(A2:X2,,SEQUENCE(12,1,1,2)),INDEX(A2:X2,,SEQUENCE(12,1,2,2)))))
或用MAP函数简化逻辑:
=SUM(MAP(SEQUENCE(12,1,1,2),LAMBDA(col, INDEX(1:1,col)*foo(INDEX(A2:X2,col),INDEX(A2:X2,col+1)))))
验证示例
以Julia示例数据测试:
- 第2行结果:
60*3*2 +20*5*4 +30*2*4 = 360+400+240=1000 - 第3行结果:
60*0*0 +20*2*3 +30*3*1 = 0+120+90=210
与Julia代码输出一致。
内容的提问来源于stack exchange,提问作者vitaminace33
相关产品推荐
相关产品推荐

