Создайте новый DenseMatrix из подматрицы в Breeze, используя Scala

У меня есть DenseMatrix (original). Я нарезаю его, чтобы удалить последний столбец (subset). После этого я хочу получить доступ к данным в подмножестве. Однако 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

person Soumya Simanta    schedule 23.04.2014    source источник


Ответы (1)


Неважно, я придумал один способ сделать это.

используя следующие

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
person Soumya Simanta    schedule 23.04.2014
comment
FWIW, срезы DenseVectors и DenseMatrices всегда являются представлениями в Breeze. .toDenseMatrix или .copy — способ обойти это. - person dlwh; 24.04.2014