Matrix J中的对角矩阵
我做了很多关于特征值的工作,因此建立/不建立对角矩阵是我经常做的事情。本着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 =: (<
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