【问题标题】:Add a vector to every column of a matrix, using Scala Breeze使用 Scala Breeze 向矩阵的每一列添加一个向量
【发布时间】:2017-09-04 01:23:00
【问题描述】:

我有一个 (L x N) 秩的矩阵 M,我想将长度为 L 的相同向量 v 添加到矩阵的每一列。请问有没有办法做到这一点,使用 Scala Breeze?

我试过了:

val H = DenseMatrix.zeros(L,N)
  for (j <- 0 to L) {
  H (::,j) = M(::,j) + v
}

但这并不真正符合 Scala 的不变性,因为 H 已经定义,因此重新分配了 val 错误。任何建议表示赞赏!

【问题讨论】:

    标签: scala matrix scala-breeze


    【解决方案1】:

    要将向量添加到矩阵的所有列,您不需要遍历列;您可以使用列广播功能,例如:

    H(::,*) + v             // assume v is breeze dense vector
    

    应该可以。


    import breeze.linalg._
    
    val L = 3
    val N = 2
    val v = DenseVector(1.0,2.0,3.0)
    val H = DenseMatrix.zeros[Double](L, N)
    
    val result = H(::,*) + v
    
    //result: breeze.linalg.DenseMatrix[Double] = 1.0  1.0  
    //                                            2.0  2.0  
    //                                            3.0  3.0  
    

    【讨论】:

    • 但实际上我收到以下错误:错误:(249、42)找不到参数 op 的隐式值:breeze.linalg.operators.OpAdd.Impl2[breeze.linalg.BroadcastedColumns[breeze .linalg.DenseMatrix[Double],breeze.linalg.DenseVector[Double]],breeze.linalg.DenseMatrix[Double],That] val H: BDM[Double] = sigmoid(M(::,*) + bias) / / 我们希望 H 为 N x L
    • 我对 Breeze 还是很陌生,这是一个没有多大意义的错误。例如,我是否缺少导入语句?
    • 检查这两个是否为真:1)bias的类型是DenseVector; 2)bias的长度等于M.rows;
    • 好的,忽略我,我意识到我没有将 b (或您的示例中的 v )转换为向量,它仍然是矩阵格式。感谢您的帮助!
    • @Psidom 这在微风 1.0 中失败:java.lang.IllegalArgumentException: requirement failed: Vectors must have same length: x.length == y.length (2 != 3)。我的代码:val v = DenseVector(1.0, 2.0)、val m1 = DenseMatrix((2.0, 3.0), (5.0, 6.0), (8.0, 9.0))、m1(::, *) + v
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2014-07-06
    • 2016-02-19
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多