使用Scala从Breeze中的子矩阵创建新的密度矩阵

使用Scala从Breeze中的子矩阵创建新的密度矩阵,scala,matrix,linear-algebra,scala-breeze,Scala,Matrix,Linear Algebra,Scala Breeze,我有一个DenseMatrix(原件)。我将其切片以删除最后一列(子集)。之后,我想访问子集中的数据。但是,subset.data仍然指向旧的DenseMatrix(original)中的数据。你知道我遗漏了什么,以及如何修复吗 original: breeze.linalg.DenseMatrix[Int] = 1 200 3 0 10 201 4 0 111 200 0 100 150 195 0 160 200 190 0 15

我有一个
DenseMatrix(原件)
。我将其切片以删除最后一列(
子集
)。之后,我想访问子集中的数据。但是,
subset.data
仍然指向旧的
DenseMatrix
original
)中的数据。你知道我遗漏了什么,以及如何修复吗

original: breeze.linalg.DenseMatrix[Int] = 
1    200  3  0    
10   201  4  0    
111  200  0  100  
150  195  0  160  
200  190  0  150  

scala> val numcols = original.cols
numcols: Int = 4

scala> val subset = original(::, 0 to numcols - 2)
subset: breeze.linalg.DenseMatrix[Int] = 
1    200  3  
10   201  4  
111  200  0  
150  195  0  
200  190  0  

scala> subset.data
res0: Array[Int] = Array(1, 10, 111, 150, 200, 200, 201, 200, 195, 190, 3, 4, 0, 0, 0, 0, 0, 100, 160, 150)

scala> subset.data.size
res1: Int = 20

没关系,我想出了一个办法

通过使用以下

scala> subset.toDenseMatrix.data
res10: Array[Int] = Array(1, 10, 111, 150, 200, 200, 201, 200, 195, 190, 3, 4, 0, 0, 0)

scala> subset.toDenseMatrix.data.size
res11: Int = 15

FWIW,密集角和密集度矩阵的切片始终是微风中的视图。toDenseMatrix或.copy是解决这个问题的方法。