如何在微风中用双倍缩放矩阵



我正在使用Breeze库的数学部分,并有以下矩阵:

val matrix = breeze.linalg.DenseMatrix((1.0,2.0),(3.0,4.0))

我想用一个标量Double来缩放它(并将结果添加到另一个矩阵)*=:*=操作员的

val scale = 2.0
val scaled = matrix * scale

这很好(更多细节请参阅下面的回答)。

更新此代码确实可以单独工作。我似乎在其他地方有问题。很抱歉浪费了你的带宽

更新2但是,如果我将类型Matrix指定给变量matrix:,则代码无法编译

val matrix: Matrix[Double] = breeze.linalg.DenseMatrix((1.0,2.0),(3.0,4.0))
val scaled = matrix * scale // does not compile

编译器一直抱怨"找不到参数op的隐式值"。

有人能解释一下吗?这是Breeze中的bug还是故意的?TIA。

对于那些在Scala和Breeze库中挣扎的人,我想在这里详细介绍一些可用于矩阵实例的函数/运算符。

我们的起点是一个简单的Double矩阵(Matrix和相关操作也支持FloatInt):

scala> val matrix = breeze.linalg.DenseMatrix((1.0,2.0),(3.0,4.0))

你可以很容易地使用漂亮地打印这个

scala> println(matrix)
1.0  2.0
3.0  4.0

Breeze支持保留左操作数不变的运算符和修改左操作数的运算符,例如**=:

scala> val scaled1 = matrix * 2.0 // returns new matrix!
scala> println(matrix)
1.0  2.0
3.0  4.0
scala> println(scaled1)
2.0  4.0
6.0  8.0
scala> println(matrix == scaled1)
false
scala> val scaled2 = matrix *= 2.0 // modifies and returns matrix!
scala> println(matrix)
2.0  4.0
6.0  8.0
scala> println(scaled2)
2.0  4.0
6.0  8.0
scala> println(matrix == scaled2) // rough equivalent of calling Java's equals()
true

两个变量的哈希代码表明它们实际上指向同一个对象(根据javadoc,这是真的,可以通过查看源代码来验证):

scala> println(matrix.##)
12345678
scala> println(scaled2.##)
12345678

进一步说明了这一点

scala> val matrix2 = breeze.linalg.DenseMatrix((2.0,4.0),(6.0,8.0))
scala> println(matrix == matrix2)
true
scala> println(matrix2.##)
34567890

相关内容

  • 没有找到相关文章

最新更新