gpt4 book ai didi

scala - 我如何用微风通过双倍缩放矩阵

转载 作者:行者123 更新时间:2023-12-04 09:43:31 25 4
gpt4 key购买 nike

我正在使用 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 的隐式值”。

任何人都可以解释一下吗?这是微风中的错误还是故意的? TIA。

最佳答案

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

我们的出发点是一个简单的 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

关于scala - 我如何用微风通过双倍缩放矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com