2016-06-18 7 views
0

Wegen der ungeraden Verhalten in der Methode foo ich nicht Methoden wie bar schreiben kann, , die ich brauche:Benötigen Sie Abhilfe für scala Brise Matrix Aufschneiden und Vektor Indizierung

import breeze.linalg.DenseMatrix 
import breeze.linalg.DenseVector 

class Test { 

    val dim = 3 
    val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim) 
    val u:DenseVector[Double] = DenseVector.fill(dim){1.0} 

    def foo:Unit = { 

     val i=0; 
     val row_i:DenseVector[Double] = X(i,::).t // OK 
     val s = u(i)+u(i)       // OK 

     val j:Integer = 0 
     val row_j:DenseVector[Double] = X(j,::).t // does not compile (A) 
     val a = u(j)+u(j)       // does not compile (B) 
    } 
    def bar(i:Integer):Double = u(i)+u(i)   // does not compile (C) 
} 

Gibt es eine Abhilfe? Vielen Dank im Voraus für alle Antworten.

Compilation Fehler:

(A) impliziten Wert nicht für den Parameter canSlice finden konnte: breeze.linalg.support.CanSlice2 [breeze.linalg.DenseMatrix [Double], Integer, collection.immutable .: : .type, Result] nicht genug Argumente für die Methode apply: (implizite canSlice: breeze.linalg.support.CanSlice2 [breeze.linalg.DenseMatrix [Double], Ganzzahl, collection.immutable. ::. type, Result])

Ergebnis in Merkmal TensorLike. Unspezifizierter Wertparameter canSlice.

(B), (C)

nicht impliziten Wert für den Parameter canSlice finden kann: breeze.linalg.support.CanSlice [breeze.linalg.DenseVector [Double], Integer, Ergebnis] nicht genug Argumente für Methode gelten: (implizite canSlice: breeze.linalg.support.CanSlice [breeze.linalg.DenseVector [Double], Integer, Ergebnis]) Ergebnis in Trait TensorLike. Unspezifizierter Wertparameter canSlice.

+0

Bitte geben Sie die Komplikationsfehler, anstatt uns zu raten –

+0

@ The Archetypal Paul, tut mir leid, ich verließ IntelliJ, um die Probleme zu sehen, aber tatsächliche Kompilierung zeigte verschiedene Fehler. Deshalb habe ich den Beitrag entsprechend bearbeitet. – gcc

Antwort

0

Zunächst einmal: konvertieren Sie Ihre Integer zu Int. Das würde zumindest den ersten Kompilierungsfehler beheben. Update auf Ihren Code folgende tut

import breeze.linalg.DenseMatrix 
import breeze.linalg.DenseVector 
import breeze.linalg.DenseMatrix 
import breeze.linalg.DenseVector 

class Test { 

    val dim = 3 
    val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim) 
    val u:DenseVector[Double] = DenseVector.fill(dim){1.0} 

    def foo:Unit = { 

     val i=0; 
     val row_i:DenseVector[Double] = X(i,::).t // OK 
     val s = u(i)+u(i)       // OK 

     val j:Int = 0 
     val row_j:DenseVector[Double] = X(j,::).t // does not compile (A) 
     val a = u(j)+u(j)       // does not compile (B) 
    } 
    def bar(i:Int):Double = u(i)+u(i)   // does not compile (C) 
} 

Vom repl kompilieren:

// Exiting paste mode, now interpreting. 

import breeze.linalg.DenseMatrix 
import breeze.linalg.DenseVector 
defined class Test 

So Ihre andere Fehler auch für mich verschwinden (scala 2.11.8). Lassen Sie es mich wissen, wenn Sie weitere Probleme haben.

+0

Danke. Sehr geschätzt. – gcc