/ Používanie programu Scala Breeze na vysielanie v štýle štýlu - scala, scalala, scala-breeze

Používanie aplikácie Scala Breeze na vysielanie v štýle štýlu - scala, scalala, scala-vánok

Existuje všeobecný spôsob, ako používať Breeze na dosiahnutie toho, čo môžete robiť pomocou vysielania v NumPy?

Konkrétne, ak mám operátora, ktorému by som rádplatí pre dve matrice 3x4, môžem použiť túto operáciu element-wise. Avšak to, čo mám, je 3x4 matica a 3-elementový vektor stĺpca. Mám rád funkciu, ktorá vytvára maticu 3x4 vytvorenú aplikáciou operátora na každý prvok matice s prvkom z vektora pre príslušný riadok.

Takže pre rozdelenie:

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

Ak to nie je k dispozícii, budem ochotný sa pozrieť na jeho realizáciu.

odpovede:

3 pre odpoveď č. 1

MapPairs môžete použiť na dosiahnutie toho, čo si "myslím", ktoré hľadáte:

  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

Som si istý, že môžete prispôsobiť to, čo chcete od jednoduchého "adder" vyššie.


1 pre odpoveď č. 2

Breeze teraz podporuje vysielanie tohto druhu:

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

Na * operátor hovorí, ktorá OS vysielať pozdĺž. Vánok, Copak "t umožňujú implicitné vysielanie, s výnimkou skalárne typy.