在 J 中计算投影矩阵

Computing projection matrices in J

我正在尝试计算 J 中的投影矩阵。也就是说,给定矩阵 A,我想计算 A(A'A)^(-1)A',其中 A'A.

我认为正确的做法是注意我正在对 A 进行三项运算并将结果相乘。如果 fgh 是动词,我正在寻找类似 (f x) * (g x) * (h x) 的内容。 (考虑到 +/ . * 是矩阵乘法。)是否有 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 解决方案。