加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何用微风来缩放矩阵

发布时间:2020-12-16 08:47:18 所属栏目:安全 来源:网络整理
导读:我正在使用 Breeze库的数学部分并具有以下矩阵: val matrix = breeze.linalg.DenseMatrix((1.0,2.0),(3.0,4.0)) 我想用一个标量Double(并将结果添加到另一个Matrix)来缩放它 * =和:* =运算符: val scale = 2.0val scaled = matrix * scale 这很好用(我在
我正在使用 Breeze库的数学部分并具有以下矩阵:

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

我想用一个标量Double(并将结果添加到另一个Matrix)来缩放它
* =和:* =运算符:

val scale = 2.0
val scaled = matrix * scale

这很好用(我在下面的回答中有更多细节).

更新此代码确实可以独立运行.我好像在其他地方有问题.抱歉浪费你的带宽……

更新2但是,如果我特意将类型Matrix分配给变量矩阵,则代码无法编译:

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

编译器一直在抱怨它“找不到参数op的隐含值”.

有人能解释一下吗?这是Breeze或故意的错误吗? TIA.

解决方法

对于那些与Scala和Breeze库斗争的人,我想详细介绍一下Matrix实例可用的一些函数/运算符.

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

scala> val matrix = breeze.linalg.DenseMatrix((1.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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读