我已经自己编写了以下代码,该代码逐步计算了相关/相关矩阵:
a=: 1 2 3
b=: 2 3 4
getmean=: +/%#
getmdevn=: -getmean
getvariance1=: (getmean@:*:)@getmdevn
getvariance1 a
getvariance1 b
corr_a_b=: getmean (a*b) - getmean a * getmean b
使用单个函数在J中计算相关/相关矩阵的最佳方法是什么?还是有什么办法可以将我所有的代码组合成一个函数?
PS我刚刚在J中找到了一些库,例如'numeric'。但是,似乎没有在线有关这些库的文档。有人知道在哪里可以找到这些库的详细信息吗?
出于实际目的,@ EelVex是正确的,您应该使用J附带的库,因为它们封装了JSoftware认为的“最佳实践”。
但是,出于教学,思想和美学的原因,我是奥列格·科布琴科(Oleg Kobchenko)胜利的忠实拥护者:
corr =: (+/@:* % *&(+/)&.:*:)&(- +/%#)
正如我在2013年提到的那样,它包含J中所有主要成分的样本:
f g h
f g
f@:g
f&g
f&.:g
除了之外&
,每个选项中只有一个。对于一个非常真实,非常普遍的计算。整齐!
而且,如果您可以阅读J,则相对于标准数学符号而言,这是一个明显的改进,因为您可以从字面上看到该公式背后的一些对称性:左叉齿是乘积(+/@:*
)的和,右叉是乘积()的和。总和(*&(+/)
)。
整个中叉是一只优雅的蝴蝶,有美丽的对称翅膀(在头上有触角%
!)。
c=:+/@:* % *&(+/)
5!:4<'c'
+- / --- +
+- @: -+- *
+- %
--+ +- *
+- & --+- / --- +
再加上整个事情在代数上减少了。这也就意味着,相反,你必须将标准的数学符号X S和ÿ S和X S和ȳ的疏散所有的地方,在corr
很明显,我们做的第一件事情是规范变量,此后所有我们曾经处理过的是增量,因此我们不受规模,度量单位等变化的影响。
作为J表示法进一步阐明基本数学结构的又一个示例,Oleg进一步简化了步骤,并切下了这个jem:
Cr=: +/@:*&(% +/&.:*:)&(- +/ % #)
正如我在2013年主题中稍后讨论的那样,由于其结构对称性,我仍然更喜欢原始版本,但是此版本也有其优点:很明显,相关性只是一系列标准化/标准化后的线性组合。
sum =: +/
of =: @
the_product =: *
after =: &
scaling =: % +/&.:*:
after =: &
standardizing =: - +/%#
corr =: sum of the_product after scaling after standardizing
我们通过尝试各种表达自己的方式来获得对数学的了解!
但是,出于实际目的,我再次建议您遵循@EelVex答案中的建议。正如亨利·里奇(Henry Rich)在奥列格(Oleg)发现这些美丽形式的线索中所观察到的:
我认为这两种形式中的任何一种都不对实际工作有用,因为它们涉及减去大的近似相等的数字,但是我通过编写它们了解了一些有关计算的知识。
其中奥列格则证明具体:
运行Wikipedia稳定性测试很容易看出来:
CR=: (+/@:* % *&(+/)&.:*:)&(- +/ % #) 0j20":CR/900000000(+,:-)1+i.1000000 _1.00000000000000000000 COR f. (+/ % #)@:*&(- (+/ % #)) % *&(%:@(+/ % #)@:*:@:- (+/ % #)) 0j20":COR/900000000(+,:-)1+i.1000000 _1.00000000000000000000 0j20":c/900000000(+,:-)1+i.1000000 1.00000229430253350000 load'stats' 0j20":corr/900000000(+,:-)1+i.1000000 _0.99999999999619615000
但是,那不是重点。最终,我认为June Kim在2007年总结得最好:
当我尝试将数学表达式转换为J表达式时,我常常非常高兴地发现该表达式中的隐藏模式。
有时,它使我找到了新见解的道路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句