matrix - 在 J 中计算投影矩阵

标签 matrix j

我正在尝试计算 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/

相关文章:

C 程序 - 在指针变量中存储值

python - 提高在二维 numpy 数组中查找最小元素的速度,该数组有许多条目设置为 np.inf

python内置函数做矩阵约简

j - 如何从 J 中的下表中操作/提取信息

j - 在J语言中,动词 `over`不起作用

j - 为什么我得不到 J 中 Euler 56 的正确答案?

matlab - 如何在不使用 MATLAB 循环的情况下将矩阵元素与其相邻元素进行比较?

java - 给定图上无向图 BFS 的 “Adjacency Matrix” 表示并输出顶点

argv - 读取多位命令行参数

j - 钩子(Hook)在字面短语中起作用,但在分配给变量时不起作用