【问题标题】:filling a matrix with Scala library breeze用 Scala 库微风填充矩阵
【发布时间】:2017-01-10 08:16:39
【问题描述】:

我是 Scala 的新手,我在一个看似简单的问题上遇到了障碍。我正在使用 Scala 库breeze,需要采用array buffer(可变)并将结果放入矩阵中。这……应该很简单但是? Scala 的类型转换如此疯狂breeze 似乎对制作 DenseVector 时将采用的数据类型非常挑剔。这只是一些原型代码,但任何人都可以帮我想出一个解决方案吗? 现在我有类似...

//9 elements that need to go into a 3x3 matrix, 1-3 as top row, 4-6 as middle row, etc)
val numbersForMatrix: ArrayBuffer[Double] = (1, 2, 3, 4, 5, 6, 7, 8, 9) 
//the empty 3x3 matrix
var M: breeze.linalg.DenseMatrix[Double] = DenseMatrix.zeros(3,3)

在微风中你可以做一些事情,比如 M(0,0) = 100 并以这种方式将第一个值设置为 100, 您还可以执行以下操作: M(0, 0 to 2) := DenseVector(1, 2, 3) 它将第一行设置为 1, 2, 3 但我不能让它做类似...

var dummyList: List[Double] = List(1, 2, 3) //this works
var dummyVec = DenseVector[Double](dummyList) //this works
M(0, 0 to 2) := dummyVec //this does not work

并成功将第一行更改为1、2、3。 那是一个列表,甚至不是一个 ArrayBuffer。

我愿意从 ArrayBuffer 更改数据类型,但根本不知道如何处理...

注意:我是一名 Python 程序员,习惯于使用 numpy 并只给它提供数组。 breeze 文档没有提供足够的其他数据类型示例,我无法弄清楚这一点。 谢谢!

【问题讨论】:

    标签: scala matrix scala-breeze scala-nlp


    【解决方案1】:

    Breeze 除了对类型的挑剔外,对向量形状也非常挑剔:DenseVectors 是列向量,但您试图分配给行的子集,这需要转置的 DenseVector:

    M(0, 0 to 2) := dummyVec.t
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      相关资源
      最近更新 更多