scala - Scala Breeze 中的矩阵乘法向量

标签 scala breeze

在这里,我尝试在从列表创建每个矩阵后将 2x2 矩阵乘以 2x1 向量:

val x1 = List[Double](1.0,2.0);
val x2 = List[List[Double]](List(1,2) , List(3,4));
val dv1 = DenseVector[Double]((x1.toArray):_*) 
val dv2 = DenseMatrix(((x2).toArray):_*) 
val h = dv1 :* dv2

但是乘法运算会抛出错误:

 \Main.scala:50: could not find implicit value for parameter op: breeze.linalg.operators.OpMulScalar.Impl2[breeze.linalg.DenseVector[Double],breeze.linalg.DenseMatrix[Double],That]
[error] val h = dv1 :* dv2

尺寸正确,因此不应引发此错误?

对于这部分错误:DenseMatrix[Double],That]应该That是Matrix的返回类型,如果是的话如何设置?

最佳答案

dv1 * dv2 不是有效操作,ncol(dv1) = 1 != nrow(dv2) = 2。切换顺序并使用 * 运算符可以满足您的需求:

scala> import breeze.linalg._
import breeze.linalg._

scala> :pa
// Entering paste mode (ctrl-D to finish)

val x1 = List[Double](1.0,2.0);
val x2 = List[List[Double]](List(1,2) , List(3,4));
val dv1 = DenseVector[Double]((x1.toArray):_*)
val dv2 = DenseMatrix(((x2).toArray):_*)

// Exiting paste mode, now interpreting.

x1: List[Double] = List(1.0, 2.0)
x2: List[List[Double]] = List(List(1.0, 2.0), List(3.0, 4.0))
dv1: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 2.0)
dv2: breeze.linalg.DenseMatrix[Double] =
1.0  2.0
3.0  4.0

scala> dv1 * dv2
java.lang.IllegalArgumentException: requirement failed: b.rows == 1 (2 != 1)
  at breeze.linalg.operators.DenseMatrixMultiplyStuff$$anon$36.apply(DenseMatrixOps.scala:100)
  at breeze.linalg.operators.DenseMatrixMultiplyStuff$$anon$36.apply(DenseMatrixOps.scala:98)
  at breeze.linalg.ImmutableNumericOps$class.$times(NumericOps.scala:135)
  at breeze.linalg.DenseVector.$times(DenseVector.scala:51)
  ... 43 elided

scala> dv2 * dv1
res2: breeze.linalg.DenseVector[Double] = DenseVector(5.0, 11.0)

关于scala - Scala Breeze 中的矩阵乘法向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173909/

相关文章:

IE8 中的 Javascript 消息超出堆栈空间

scala - 带有无序字段的 Json4s 自定义序列化程序

scala - 如何将响应主体字段传递给其他请求的主体(Gatling)

scala - 将 Scala @suspendable 方法转换为 Future

node.js - BreezeJS RequireJS 针对生产进行了优化

model-view-controller - knockoutjs 的无容器语句在 hottowel SPA 中不起作用?

git - 组织多个 Scala 相互关联的 sbt 和 git 项目 - 最佳实践建议

scala - Spark - 如何将数据帧中定义的规则应用于另一个数据帧

breeze - 如何查看 Breeze 客户端验证错误

没有服务器元数据的 Breezejs