在 J 中计算投影矩阵
Computing projection matrices in J
我正在尝试计算 J 中的投影矩阵。也就是说,给定矩阵 A
,我想计算 A(A'A)^(-1)A'
,其中 A'
是 A
.
我认为正确的做法是注意我正在对 A
进行三项运算并将结果相乘。如果 f
、g
和 h
是动词,我正在寻找类似 (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 解决方案。
我正在尝试计算 J 中的投影矩阵。也就是说,给定矩阵 A
,我想计算 A(A'A)^(-1)A'
,其中 A'
是 A
.
我认为正确的做法是注意我正在对 A
进行三项运算并将结果相乘。如果 f
、g
和 h
是动词,我正在寻找类似 (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 解决方案。