gpt4 book ai didi

google-sheets - 为什么 SCAN/LAMBDA 会给出意想不到的结果?

转载 作者:行者123 更新时间:2023-12-02 01:28:14 26 4
gpt4 key购买 nike

我很可能不理解 lambda 逻辑,对吗?我有数据集 A2:A5,如下所示:

1
3
6
10

如果我这样做:=SCAN(0, A2:A5, LAMBDA(aa, bb, aa+bb)) 我得到:

1
4
10
20

如果我这样做:=SCAN(0, A2:A5, LAMBDA(aa, bb, ROW(bb)-1)) 我得到

1
2
3
4

如果我运行:=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1))) 结果是

1
8
42
208

为什么是 42 和 208 ?这是如何产生这样的值的?怎么会是42和208呢?

预期结果是

1
8
30
80

我可以通过以下方式得到它:

=ArrayFormula(SCAN(0, A2:A5, LAMBDA(aa, bb, aa+bb))*(ROW(A2:A5)-1))

但不是

=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1)))

最佳答案

SCAN 是一个很棒的中间结果函数。要了解 SCAN 的运作方式,您需要了解 REDUCE 的运作方式。语法为:

=REDUCE(initial_value, array, LAMBDA(accumulator, current_value, some_function()))

逐步执行=SCAN(0, A2:A5, LAMBDA(aa, bb, (aa+bb)*(ROW(bb)-1)))

>
  • A2:A5 为 1,3,6,10

  • 第 1 步:

    • aa = 0(初始值)
    • bb = 1(当前值:A2)
    • 结果((aa+bb)*(ROW(bb)-1)): (0+1)*(2-1)=1
  • 第 2 步:

    • aa = 1(累加器(前一个返回值))
    • bb = 3(当前值:A3)
    • 结果((aa+bb)*(ROW(bb)-1)): (1+3)*(3-1)=8
  • 第 3 步:

    • aa = 8(累加器(前一个返回值))
    • bb = 6(当前值:A4)
    • 结果((aa+bb)*(ROW(bb)-1)): (8+6)*(4-1)=42
  • 第 4 步:

    • aa = 42(累加器(前一个返回值))
    • bb = 10(当前值:A5)
    • 结果((aa+bb)*(ROW(bb)-1)):(42+10)*(5-1)=52*4=208

关于google-sheets - 为什么 SCAN/LAMBDA 会给出意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73920148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com