breeze 复制下三角不起作用?
breeze Copy lower triangle not working?
使用 breeze 0.13,Scala 2.12.3
我想通过将下面的三角形复制到上面的三角形来创建一个对称矩阵。按照 Linear Algebra Cheat Sheet 中的说明进行操作。可能是我错误地使用了该函数,但 lowerTriangular
函数似乎无法正常工作。副本只是
val myMtx = breeze.linalg.DenseMatrix((1,-8,-9) , (2,1,-7), (3,5,1))
//myMtx: breeze.linalg.DenseMatrix[Int] =
// 1 -8 -9
// 2 1 -7
// 3 5 1
复制下三角(似乎不起作用)
breeze.linalg.lowerTriangular(myMtx)
// 1 0 0
// 2 1 0
// 3 5 1
复制上三角(也不起作用)
breeze.linalg.upperTriangular(myMtx)
// 1 -8 -9
// 0 1 -7
// 0 0 1
在此上下文中,"copy" 表示 returns 新分配内存中的矩阵。这与索引到相同后备内存的 "view" 形成对比。
考虑到这一点,lowerTriangular 和 upperTriangular 似乎都可以正常工作,因为它 returns 一个新矩阵,它具有从原始矩阵复制的相同元素。
现在的任务是创建一个新的对称矩阵,它是下三角的副本。一种可能的方法是计算下对角线转置和下对角线转置的逐元素总和,然后减去计算出的对角线的额外副本。如上所述,内部 diag() returns 一个视图作为向量,然后使用该向量与第二个 diag() 创建对角矩阵。
@ val sym = lowerTriangular(myMtx) + lowerTriangular(myMtx).t - diag(diag(myMtx))
sym: DenseMatrix[Int] =
1 2 3
2 1 5
3 5 1
使用 breeze 0.13,Scala 2.12.3
我想通过将下面的三角形复制到上面的三角形来创建一个对称矩阵。按照 Linear Algebra Cheat Sheet 中的说明进行操作。可能是我错误地使用了该函数,但 lowerTriangular
函数似乎无法正常工作。副本只是
val myMtx = breeze.linalg.DenseMatrix((1,-8,-9) , (2,1,-7), (3,5,1))
//myMtx: breeze.linalg.DenseMatrix[Int] =
// 1 -8 -9
// 2 1 -7
// 3 5 1
复制下三角(似乎不起作用)
breeze.linalg.lowerTriangular(myMtx)
// 1 0 0
// 2 1 0
// 3 5 1
复制上三角(也不起作用)
breeze.linalg.upperTriangular(myMtx)
// 1 -8 -9
// 0 1 -7
// 0 0 1
在此上下文中,"copy" 表示 returns 新分配内存中的矩阵。这与索引到相同后备内存的 "view" 形成对比。
考虑到这一点,lowerTriangular 和 upperTriangular 似乎都可以正常工作,因为它 returns 一个新矩阵,它具有从原始矩阵复制的相同元素。
现在的任务是创建一个新的对称矩阵,它是下三角的副本。一种可能的方法是计算下对角线转置和下对角线转置的逐元素总和,然后减去计算出的对角线的额外副本。如上所述,内部 diag() returns 一个视图作为向量,然后使用该向量与第二个 diag() 创建对角矩阵。
@ val sym = lowerTriangular(myMtx) + lowerTriangular(myMtx).t - diag(diag(myMtx))
sym: DenseMatrix[Int] =
1 2 3
2 1 5
3 5 1