gpt4 book ai didi

fork - J语言熵公式

转载 作者:行者123 更新时间:2023-12-02 04:00:59 26 4
gpt4 key购买 nike

我正在使用 J 编程语言,我尝试创建一个动词来从概率列表中计算熵(事件的结果,公式在 python/pesudocode 中将如下所示:-sum([p*log(p,2) for p in ps])).

我尝试使用组合(@:)的版本可以工作,但是基于hookfork的版本似乎正在做其他的东西,我关心为什么它这样做它所做的事情。我正在尝试使用 hookfork,这个案例确实证明了我的直觉是错误的。

这是代码:

   probs =: 0.75 0.25    NB. probabilties
entropy =: +/ @: (- * 2&^.)
entropyWrong =: +/ (- * 2&^.)
entropy probs NB. this is correct
0.811278
entropyWrong probs NB. this is wrong!
1.06128 1.25
0.561278 0.75
NB. shouldn't the following be the same as above (wrong)?
+/ (- * 2&^.) probs
0.811278

我的问题的重点不是“如何在 JS 中计算概率熵”,而是“为什么上面的 entropyWrong 会做它所做的事情以及为什么它与“它的内容”不同“这显然是正确的做法。

最佳答案

entropyWrong 定义是您单子(monad)使用的一个钩子(Hook)。

entropyWrong =: +/ (- * 2&^.)

如果一个单子(monad)钩子(Hook)表示为 (u v) y那么在你的情况下+/是你和(- * 2&^.)是 v; v 是一个 fork 。 y 当然是 probs,名词论证。

J 将单子(monad)钩子(Hook)的操作定义为等同于 y u v y这样 u 就成为二元,y 作为其左参数,v y 作为其右参数。这与J从右到左的执行顺序是一致的。

顺便说一句, fork 定义为 (f g h) y其中 f、g 和 h 是动词,结果为 (f y) g h y 。每个动词都可以被描述为 fork 的一个 fork ,中间的 fork g 是二元的,而 f 和 h 是单子(monad)的,当 fork 单子(monad)应用时。

entropy =: +/ @: (- * 2&^.)正在做一些不同的事情。熵的形式为u @: v并获取 fork v 的结果并将它们一元地应用于动词 u

如果您想摆脱 @: 的使用在熵中,您可以使用动词 [: 来做到这一点。当用作 fork 的左齿时[:不返回任何结果,这会创建一个一元中心齿而不是二元中心齿。

   entropy2=: [: +/ (- * 2&^.) NB. with three verbs this is now a fork
probs =: 0.75 0.25
entropy2 probs
0.811278

关于fork - J语言熵公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41951184/

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