我正在尝试计算 J 中的投影矩阵。也就是说,给定矩阵 A
,我想计算 A(A'A)^(-1)A'
,其中 A'
是 A
的转置.
我认为正确的方法是注意我正在对 A
进行三个操作。并将结果相乘。我正在寻找类似 (f x) * (g x) * (h x)
的东西如果 f
, g
, 和 h
是动词。 (考虑到 +/ . *
是矩阵乘法。)是否有 J 构造或习语可以简洁地做到这一点?还是在 J 中有更好的方法来做到这一点?
到目前为止我的粗略工作:
mp =: +/ . *
ATA =: |: mp ]
right_proj =: (%.@ATA) mp |: NB. (A'A)^(-1)A factor in product.
proj_mat =: ] mp right_proj
最佳答案
我认为您的解决方案非常好。我的直接方法将非常相似:
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
.如果我们定义一个动词来创建单位矩阵,我们可以使用 %.
获得大部分方法 - 只需要预先乘以 X。I=: =@i.@# NB. identity matrix
proj_mat=: mp I %. ] NB. projection matrix
结果与第一种方法并不完全相同,但我认为它们将更类似于 LAPACK 解决方案。
关于matrix - 在 J 中计算投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46700276/