Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix J中投影矩阵的计算_Matrix_J - Fatal编程技术网

Matrix J中投影矩阵的计算

Matrix J中投影矩阵的计算,matrix,j,Matrix,J,我试图计算J中的投影矩阵。也就是说,给定矩阵a,我想计算a(a'a)^(-1)a',其中a'是a的转置 我认为正确的方法是注意我对A做了三个运算,并将结果相乘。如果f,g和h都是动词,我在寻找类似(fx)*(gx)*(hx)的东西。(考虑到+/.*是矩阵乘法)有没有一个J结构或习惯用法可以简洁地做到这一点?或者在J中有没有更好的方法 我迄今为止的艰苦工作: mp =: +/ . * ATA =: |: mp ] right_proj =: (%.@ATA) mp |: NB. (A'A)^(-1

我试图计算J中的投影矩阵。也就是说,给定矩阵
a
,我想计算
a(a'a)^(-1)a'
,其中
a'
a
的转置

我认为正确的方法是注意我对A做了三个运算,并将结果相乘。如果
f
g
h
都是动词,我在寻找类似
(fx)*(gx)*(hx)
的东西。(考虑到
+/.*
是矩阵乘法)有没有一个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解决方案

如果有必要,可以使用库“math/lapack”中的QR(
128!:0
)或SVD分解。那么A(A'A)^(-1)A'=QQ'或UU.你有你提到的等价性的来源吗?二元
%.
的J词汇表页面提到最小化与投影相关的距离,但我猜不到使用矩阵而不是向量做同样的事情。下一页在“更多信息”部分提出了等价性。