【问题标题】:What is the pseudocode translation for the ema function in KDB?KDB 中 ema 函数的伪代码翻译是什么?
【发布时间】:2021-12-17 22:52:17
【问题描述】:

我正在尝试了解ema 的底层功能。

当我调用它时,它会返回k 中的源代码。

q)ema

k){(*y)(1f-x)\x*y}

q)ema[0.2;til 5]

0 0.2 0.56 1.048 1.6384

到目前为止,一切都很好。

当我尝试直接调用它时,它似乎不喜欢*。我做错了什么?

q){(*y)(1f-x)\x*y}[0.2;til 5]
'*
  [0]  {(*y)(1f-x)\x*y}[0.2;til 5]
         ^

如何用英语/伪代码描述这个k 短语?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    补充 Mark 和 Terry 的答案:您的代码失败的原因是因为 q 无法将 * 识别为除二元(两个参数)函数之外的任何东西。而k 解释器会将其视为一元的,如果它在正确的上下文中(它在ema 中)。
    .q 命名空间包含 k 函数到 q 关键字的映射,因此,将来,如果您在 k 表达式中遇到类似的运算符,您应该能够在此命名空间中查找它们。例如:

    q).q?(*:) // Search for the monadic form of '*'
    `first
    

    在这里你可以看到一元的* 确实等价于first。 这适用于其他功能:

    q).q?(>:)
    `hclose
    q).q?(^:)
    `null
    q).q?(-:)
    `neg
    q).q?(=:)
    `group
    

    这不能保证在所有情况下都有效,更复杂的表达式可能会失败。但这是一个很好的第一个参考点。

    【讨论】:

    • 谢谢肖恩,这很有帮助!
    【解决方案2】:

    马克击败了我,我给出了确切的答案!

    有一点要补充到他的答案中,这个 ema 函数正在使用此处记录的特殊速记形式:https://code.kx.com/q/ref/accumulators/#alternative-syntax

    因此,

    (*y)(1f-x)\x*y
    

    等价于

    {z+x*y}\[first 0 1 2 3 4;1f-0.2;0.2*0 1 2 3 4]
    

    这可能更容易理解为:

    {(0.2*z)+x*y}\[0;0.8;0 1 2 3 4]
    

    或者干脆

    {(0.2*y)+x*0.8}\[0;0 1 2 3 4]
    

    又名前总和的 0.8 倍加上新值的 0.2 倍

    【讨论】:

      【解决方案3】:

      您可以通过在命令提示符中添加 k) 来运行 k 代码

      q)k){(*y)(1f-x)\x*y}[0.2;0 1 2 3 4]
      0 0.2 0.56 1.048 1.6384
      

      或者通过将字符串传递给“k”。这允许您在语句中间执行此操作。您将不得不转义反斜杠

      q)"k" "{(*y)(1f-x)\\x*y}[0.2;0 1 2 3 4]"
      0 0.2 0.56 1.048 1.6384
      

      【讨论】:

      • q 的文档是否等同于 k;例如* 和 `\` 在两种语言中的意思是一样的吗?
      • 在 ema 中使用 \ 是作为一个累加器,在这里描述:code.kx.com/q/ref/accumulators/#alternative-syntax。 * 在应用单个参数时与 first 相同,在应用两个参数时与 first 相同
      • kdb+ (k4) 中使用的 k 版本没有记录,但您可以使用 Sean 的提示进行推断
      • 感谢您的回答@Mark!那么 k 真的不应该被用户使用吗?
      • 我永远不会在生产环境中使用 k,因为它缺乏可读性,这使得其他人难以理解维护
      猜你喜欢
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多