2016-06-12 5 views
0

このコードは、リストのは [一覧[INT]]と省略し、そのタイプ

val matrix = Matrix(List(List(1, 2), List(3, 4))) 

class Matrix(matrixParameters: List[List[Int]]) 

object Matrix { 
    def apply(matrixParameters: List[List[Int]]) { 
    new Matrix(matrixParameters) 
    } 
} 

を使用して一覧を作成します。しかし List[List[Int]]の使用を省略し、同じようなものを使用したいです:

val matrix = Matrix(1,2; 3,4) 

これはScalaで実現できますか? ...

val matrixFromString = MatrixFromString("1,2; 3,4") 
object MatrixFromString { 
    def apply(matrixParameters: String) { 
    val l1 = matrixParameters.split(";")(0).split(",").map { x => Integer.valueOf(x).toInt }.toList; 
    val l2 = matrixParameters.split(";")(1).split(",").map { x => Integer.valueOf(x).toInt }.toList; 

    new Matrix(List(l1, l2)) 
    } 
} 
+0

私はそれはあなたの問題を解決しないかもしれないけど、私は非常に[ScalaのNLPブリーズ線形代数](https://github.com/scalanlpをお勧めします/ breeze)ライブラリ。少なくとも、彼らの 'DenseMatrix'コンストラクタはあなたが求めていることを正確に行います。あなたはそのコードの一部を抜き出すことができます。 –

+0

@ evan058ありがとうが、私はbreezeライブラリを試してみましたが、これはmatlabと比較しても、線形代数演算の最も基本的なコンパイルには非常に遅いです。 –

+0

コンパイルまたは実行しますか?最高でMatlabと同じくらい速く行列乗算のような演算を実行します(BLASとLAPACKの実装をセットアップする必要があります) –

答えて

2

ない正確に何をしたいが、非常に控えめな変更を

:私が持っている一番近い

は、このあまりエレガントなコードを使用して文字列からリストのリストを作成することです

class Matrix(matrixParameters: List[List[Int]]) 

object Matrix { 
    def apply(rows : Seq[Int]*) = new Matrix(rows.map(_.toList).toList) 
} 

今、あなたはあなたがwが作業しているパッケージのため、パッケージオブジェクトを定義することができ

val matrix = Matrix( 
    1 :: 2 :: Nil, 
    3 :: 4 :: Nil 
) 

を書くことができますi番目、型エイリアス

type Row = Seq[Int] 
val Row = Seq 

その後

val matrix = Matrix( 
    Row(1, 2), 
    Row(3, 4) 
) 
関連する問題