3

Breeze (以前の Scalala) を初めて使用するので、次の単純なプログラムで例外がスローされる理由がわかりません。私はScala 2.9.2とBreeze 0.1を使用しています:

import breeze.linalg._
val m = DenseMatrix((3.0, 1.0, 2.0), (-2.0, 1.0, 3.0))
val n = mean(m, Axis._1)

2x2 または 3x2 マトリックスを使用すると期待どおりに動作しますが、2x3 マトリックスを使用すると次の例外が発生します。

-- org.jblas ERROR Couldn't load copied link file: java.lang.UnsatisfiedLinkError: C:\Users\daved\AppData\Local\Temp\jblas8588491482847885553jblas.dll: Can't find dependent libraries.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at breeze.linalg.package$$anon$1.apply$mcD$sp(package.scala:203)
    at breeze.linalg.package$$anon$1.apply(package.scala:196)
    at breeze.linalg.package$$anon$1.apply(package.scala:186)
    at breeze.linalg.DenseVector.ureduce(DenseVector.scala:91)
    at breeze.linalg.Tensor$$anon$1.apply(Tensor.scala:149)
    at breeze.generic.UReduceable$class.apply$mcD$sp(URFunc.scala:56)
    at breeze.linalg.Tensor$$anon$1.apply$mcD$sp(Tensor.scala:148)
    at breeze.generic.URFunc$mcD$sp$class.apply$mcD$sp(URFunc.scala:32)
    at breeze.linalg.package$$anon$1.apply$mcD$sp(package.scala:186)
    at breeze.generic.URFunc$mcD$sp$$anonfun$apply$mcD$sp$1.apply(URFunc.scala:36)
    at breeze.linalg.LowPriorityDenseMatrix1$$anon$17.apply(DenseMatrix.scala:444)
    at breeze.linalg.LowPriorityDenseMatrix1$$anon$17.apply(DenseMatrix.scala:440)
    at breeze.generic.URFunc$mcD$sp$class.apply$mcD$sp(URFunc.scala:36)
    at breeze.linalg.package$$anon$1.apply$mcD$sp(package.scala:186)
    at com.tennisedge.opencv.BreezePlay$delayedInit$body.apply(BreezePlay.scala:24)
4

2 に答える 2

3

これはBreezeのバグだと思います。特に、DenseMatrix canCollapseCols暗黙の変換。

ローカルファイルで独自の暗黙的な変換を定義すると、すべてが期待どおりに機能します。

implicit def myCanCollapseCols[V, R:ClassManifest] = new CanCollapseAxis[DenseMatrix[V], Axis._1.type, DenseVector[V], R, DenseVector[R]] {
  def apply(from: DenseMatrix[V], axis: Axis._1.type)(f: (DenseVector[V]) => R): DenseVector[R] = {
    val result = DenseVector.zeros[R](from.rows)
    val t = from.t
    for(r <- 0 until t.cols) { // BUG WAS HERE: was from.cols in original defintion.
      result(r) = f(t(::, r))
    }
    result
  }
}

val m = breeze.linalg.DenseMatrix((3.0, 1.0, 2.0), (-2.0, 1.0, 3.0))
val n = breeze.linalg.mean(m, breeze.linalg.Axis._1)

これはまだ頭の中にあるので、GitHubでプルリクエストを作成して修正します。それまでの間、私は自分自身の暗黙の変換を使用することができます。

于 2013-02-15T16:23:55.433 に答える
1

これは、コンストラクターで例外がスローされる問題の完璧な例です (これを参照)。依存関係の問題を装っているのは、実際には、ArrayIndexOutOfBoundsExceptionオンデマンド クラスのロード中に呼び出されたコンストラクターで発生したものです。それはしばしば非常に当惑します。(これは、コンストラクターで例外をスローする私の「お気に入り」(最も悪名高い) の結果です。)

少なくとも私にはそう見える。確信が持てません、本当に。

于 2013-02-15T16:00:49.043 に答える