我试图计算J中的投影矩阵。即,给定矩阵A
,我想计算A(A'A)^(-1)A'
,其中A'
是{的转置{1}}。
我认为正确的做法是注意我要对A
进行三次操作并将结果相乘。如果A
,(f x) * (g x) * (h x)
和f
是动词,我正在寻找g
之类的内容。 (将h
视为矩阵乘法。)是否有简洁的J构造或成语?或者在J中有更好的方法吗?
到目前为止我的粗略工作:
+/ . *
答案 0 :(得分:3)
我认为您的解决方案非常好。我的直接方法非常相似:
mp=: +/ .* NB. matrix multiplication
XtY=: mp~ |: NB. sum of cross products (monadic is XtX)
proj_mat=: mp %.@XtY mp |:
然而,可以使用二元%.
来替代y %. X
,这可以产生数值上更好的结果。它依赖于X'X^(-1)X'y
等同于%.
的事实。如果我们定义一个动词来创建一个单位矩阵,我们可以使用I=: =@i.@# NB. identity matrix
proj_mat=: mp I %. ] NB. projection matrix
来获得大部分 - 只需要预先乘以X.
month.name[1:4]
[1] "January" "February" "March" "April"
结果与第一种方法并不完全相同,但我认为它们与LAPACK解决方案更相似。