使用Scala Breeze进行numPy风格的广播

使用Scala Breeze进行numPy风格的广播,scala,scalala,scala-breeze,Scala,Scalala,Scala Breeze,有没有一种通用的方法使用Breeze来实现在NumPy中使用广播可以实现的功能 具体来说,如果我有一个运算符,我想应用于两个3x4矩阵,我可以按元素应用该运算符。然而,我有一个3x4矩阵和一个3元素列向量。我想要一个函数,它生成一个3x4矩阵,该矩阵是通过将运算符应用于矩阵的每个元素,并使用对应行的向量中的元素创建的 因此,对于一个部门: 2 4 6 / 2 3 = 1 2 3 3 6 9 1 2 3 如果这不可用。我愿意考虑实施它。您可以使用映射对来实现我“认

有没有一种通用的方法使用Breeze来实现在NumPy中使用广播可以实现的功能

具体来说,如果我有一个运算符,我想应用于两个3x4矩阵,我可以按元素应用该运算符。然而,我有一个3x4矩阵和一个3元素列向量。我想要一个函数,它生成一个3x4矩阵,该矩阵是通过将运算符应用于矩阵的每个元素,并使用对应行的向量中的元素创建的

因此,对于一个部门:

2 4 6   /  2 3  = 1 2 3
3 6 9             1 2 3

如果这不可用。我愿意考虑实施它。

您可以使用映射对来实现我“认为”的目标:

  val adder = DenseVector(1, 2, 3, 4)

  val result = DenseMatrix.zeros[Int](3, 4).mapPairs({
    case ((row, col), value) => {
      value + adder(col)
    }
  })

  println(result)

1  2  3  4  
1  2  3  4  
1  2  3  4  

我相信你可以从上面简单的“加法器”中调整你想要的内容。

你可以使用映射对来实现我“认为”你想要的:

  val adder = DenseVector(1, 2, 3, 4)

  val result = DenseMatrix.zeros[Int](3, 4).mapPairs({
    case ((row, col), value) => {
      value + adder(col)
    }
  })

  println(result)

1  2  3  4  
1  2  3  4  
1  2  3  4  

我相信您可以从上面简单的“加法器”中调整您想要的内容。

Breeze现在支持此类广播:

scala> val dm = DenseMatrix( (2, 4, 6), (3, 6, 9) )
dm: breeze.linalg.DenseMatrix[Int] = 
2  4  6  
3  6  9  

scala> val dv = DenseVector(2,3)
dv: breeze.linalg.DenseVector[Int] = DenseVector(2, 3)

scala> dm(::, *) :/ dv
res4: breeze.linalg.DenseMatrix[Int] = 
1  2  3  
1  2  3  

*
操作员说沿哪个轴广播。Breeze不允许隐式广播,标量类型除外。

Breeze现在支持此类广播:

scala> val dm = DenseMatrix( (2, 4, 6), (3, 6, 9) )
dm: breeze.linalg.DenseMatrix[Int] = 
2  4  6  
3  6  9  

scala> val dv = DenseVector(2,3)
dv: breeze.linalg.DenseVector[Int] = DenseVector(2, 3)

scala> dm(::, *) :/ dv
res4: breeze.linalg.DenseMatrix[Int] = 
1  2  3  
1  2  3  

*
操作员说沿哪个轴广播。Breeze不允许隐式广播,除了标量类型。

谢谢,是的,这是完成我需要做的一类事情的有用方法。任何地方都有Breeze的文档吗。例如,当我在Scaladoc中查找映射对时,它只是说“创建一个包含此映射的转换副本的新映射”?看起来是一个非常强大的库,但是没有任何文档很难进入。我希望有更多的文档。我主要是通过使用REPL测试特性来学习的。该库确实遵循一种在scala中似乎相当惯用的通用模式,其接口类似于CanBuildFrom或在本例中是CanMapKeyValuePairs。例如,映射对是类张量特性的一部分,所以你也可以在其他对象中看到它。谢谢,是的,这是完成我需要做的一类事情的有用方法。任何地方都有Breeze的文档吗。例如,当我在Scaladoc中查找映射对时,它只是说“创建一个包含此映射的转换副本的新映射”?看起来是一个非常强大的库,但是没有任何文档很难进入。我希望有更多的文档。我主要是通过使用REPL测试特性来学习的。该库确实遵循一种在scala中似乎相当惯用的通用模式,其接口类似于CanBuildFrom或在本例中是CanMapKeyValuePairs。例如,贴图对是类张量特征的一部分,因此您也可以在其他对象中看到它。