Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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_Linear Algebra_J - Fatal编程技术网

Matrix J中的对角矩阵

Matrix J中的对角矩阵,matrix,linear-algebra,j,Matrix,Linear Algebra,J,我做了很多关于特征值的工作,因此建立/不建立对角矩阵是我经常做的事情。本着J的精神,我提出了一些简单的定义,但我是否错过了一个更简单的方法?我在短语手册里找不到任何东西,但可能是找错地方了 根据对角线条目列表生成对角线矩阵: diag =: * =@i.@# 4 4 $ 1j4 # y NB. the required diagonal matrix 从矩阵中提取对角线项: extract =: +/@(* =@i.@#) 矩阵的对角项在J中有一个标准定义: extract =: (<

我做了很多关于特征值的工作,因此建立/不建立对角矩阵是我经常做的事情。本着J的精神,我提出了一些简单的定义,但我是否错过了一个更简单的方法?我在短语手册里找不到任何东西,但可能是找错地方了

根据对角线条目列表生成对角线矩阵:

diag =: * =@i.@#
4 4 $ 1j4 # y NB. the required diagonal matrix
从矩阵中提取对角线项:

extract =: +/@(* =@i.@#)

矩阵的对角项在J中有一个标准定义:

extract =: (<0 1)&|:
但我已经不记得为什么了。你的版本更好

   (* =) 2 3 4
2 0 0
0 3 0
0 0 4
如果您使用的是独特的元素

diag=: * = NB. a hook defined tacitly

   diag 89 3 56.6
89 0    0
 0 3    0
 0 0 56.6
当矩阵不再是正方形时,如果元素不是唯一的,则
=
将崩溃

   diag 3 4 4
|length error: diag
|       diag 3 4 4

另一个解决方案涉及使用“复制填充”

这比OP的原始公式要长,但它同时适用于数字和字符(只要您希望空格扮演零的角色)

简短解释(主要针对“未来的我”,因为我对J相当陌生):

考虑以下示例(用
y=:1 2 5 7
表示对角线条目):

左侧的复数参数
1j4
在从
y
复制的每个项目后插入4个零。将其重塑为4x4矩阵,即可得到对角矩阵


上面的
4
只不过是y:
#y
中的项目数。所以我们可以概括为
(2#y)$(1 j#y)#y
。顶部给出了与此对应的默认值。

math/mt
math/lapack
中有相关定义,现在我知道该去哪里找了!
diag =: (2 ##) $ (#~ 1 j. #)
4 4 $ 1j4 # y NB. the required diagonal matrix