【问题标题】:Need workaround for scala breeze matrix slicing and vector indexing需要 Scala 微风矩阵切片和矢量索引的解决方法
【发布时间】:2016-06-18 09:55:42
【问题描述】:

由于 foo 方法的奇怪行为,我无法编写 bar 之类的方法, 我需要的:

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)
}

有解决方法吗? 提前感谢所有回复。

编译错误:

(A) 找不到参数 canSlice 的隐式值: 微风.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Double],Integer,collection.immutable.::.type,Result] 方法 apply 的参数不足:(隐式 canSlice: 微风.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Double],Integer,collection.immutable.::.type,Result])

导致特征 TensorLike。未指定值参数 canSlice。

(B), (C)

找不到参数 canSlice 的隐含值: 微风.linalg.support.CanSlice[breeze.linalg.DenseVector[双],整数,结果] 方法应用的参数不足:(隐式 canSlice:breeze.linalg.support.CanSlice[breeze.linalg.DenseVector[Double],Integer,Result])结果 在特征 TensorLike 中。未指定值参数 canSlice。

【问题讨论】:

  • 请给出编译错误而不是让我们猜测
  • @The Archetypal Paul,对不起,我依靠 IntelliJ 来预览问题,但实际编译显示不同的错误。因此我相应地编辑了帖子。

标签: scala matrix vector breeze


【解决方案1】:

首先:将您的 Integer 转换为 Int 。这至少可以解决第一个编译错误。更新代码后会编译

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)
}

来自repl:

// Exiting paste mode, now interpreting.

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

所以你的其他错误对我来说也消失了(scala 2.11.8)。如果您还有其他问题,请告诉我。

【讨论】:

  • 谢谢。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 2019-10-18
相关资源
最近更新 更多