提取矩阵的下三角部分

coo*_*lsv 4 matrix julia

我想知道Julia中是否有命令或包允许我们直接提取矩阵的下三角部分,不包括对角线.我可以为此调用R命令(比如gdata包的lowerTriangle),但是我想知道Julia是否有类似的东西.例如,假设我有矩阵

1.0    0.751   0.734    
0.751   1.0    0.948    
0.734  0.948    1.0
Run Code Online (Sandbox Code Playgroud)

我不想创建一个下三角矩阵

NA     NA      NA     
0.751   NA      NA    
0.734  0.948    NA
Run Code Online (Sandbox Code Playgroud)

但是将矩阵的下半部分提取为数组: 0.751 0.734 0.948

sun*_*ica 5

如果你可以创建一个下三角矩阵作为中间步骤,你可以使用逻辑索引和tril!额外的参数来获得你需要的东西.

julia> M = [1.0 0.751 0.734
0.751 1.0 0.948
0.734 0.948 1.0];
julia> v = M[tril!(trues(size(M)), -1)]
3-element Array{Float64, 1}:
0.751
0.734
0.948
Run Code Online (Sandbox Code Playgroud)

trues调用返回一个M形状的数组,其中填充了布尔true值.tril!然后将其修剪为我们想要的矩阵部分.tril的第二个参数!告诉它从哪个超对角线开始,我们在这里使用它来避免前导对角线中的值.

我们使用它的结果索引到M,并返回一个具有所需值的数组.

  • 但是,如果您不介意丢弃出现在下三角部分的零点,这只会起作用.您可以使用与逻辑数组相同的想法,而不是更安全,更有效:`M [tril!(trues(size(M)), - 1)] (2认同)