2014-10-06 2 views
1

В нижнем коде, как я могу округлять значения DenseVector до одного десятичного знака.Как объединить DenseVector в Scala бриз?

значение DenseVector должно быть:

DenseVector(0.4, 0.4, 0.2) 

вместо:

DenseVector(0.36000000003540067, 0.35999999990731946, 0.18000000005727962) 

Я попытался с помощью круглой метод, но его не поддержали:

 var nv : DenseVector[Double] = ((m * v).round) 
value round is not a member of breeze.linalg.DenseVector[Double] 

весь код для умножения Матрица по вектору:

val m = DenseMatrix((0.5, 0.5, 0.0) , (0.5 , 0.0 , 1.0) , (0.0 , 0.5 , 0.0)) 
                //> m : breeze.linalg.DenseMatrix[Double] = 0.5 0.5 0.0 
                //| 0.5 0.0 1.0 
                //| 0.0 0.5 0.0 
var v = DenseVector(0.3 , 0.3 , 0.3)    //> v : breeze.linalg.DenseVector[Double] = DenseVector(0.3, 0.3, 0.3) 
for (i <- 1 to 100) { 
var nv : DenseVector[Double] = (m * v) 
v = nv 
if(i > 90){ 
    println(nv) 
} 
}             //> Oct 06, 2014 9:55:00 PM com.github.fommil.netlib.BLAS <clinit> 
                //| WARNING: Failed to load implementation from: com.github.fommil.netlib.Native 
                //| SystemBLAS 
                //| Oct 06, 2014 9:55:00 PM com.github.fommil.netlib.BLAS <clinit> 
                //| WARNING: Failed to load implementation from: com.github.fommil.netlib.Native 
                //| RefBLAS 
                //| DenseVector(0.3599999998439336, 0.36000000040858693, 0.17999999974747932) 
                //| DenseVector(0.36000000012626027, 0.3599999996694461, 0.18000000020429346) 
                //| DenseVector(0.3599999998978532, 0.3600000002674236, 0.17999999983472306) 
                //| DenseVector(0.36000000008263844, 0.35999999978364966, 0.1800000001337118) 
                //| DenseVector(0.359999999933144, 0.36000000017503103, 0.17999999989182483) 
                //| DenseVector(0.3600000000540875, 0.3599999998583968, 0.18000000008751552) 
                //| DenseVector(0.35999999995624216, 0.36000000011455924, 0.1799999999291984) 
                //| DenseVector(0.36000000003540067, 0.35999999990731946, 0.18000000005727962) 
                //| DenseVector(0.35999999997136006, 0.3600 
                //| Output exceeds cutoff limit. 
} 

ответ

3

Большинство «преобразований», как правило, живут в breeze.numerics._ как автономные функции. Одним из них является rint, который округляется до ближайшего целого.

Итак:

scala> import breeze.linalg._ 
import breeze.linalg._ 

scala> DenseVector(0.36000000003540067, 0.35999999990731946, 0.18000000005727962) 
res1: breeze.linalg.DenseVector[Double] = DenseVector(0.36000000003540067, 0.35999999990731946, 0.18000000005727962) 

scala> breeze.numerics.rint(res1 * 10.0)/10.0 
res2: breeze.linalg.DenseVector[Double] = DenseVector(0.4, 0.4, 0.2) 
Смежные вопросы