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ď č. 1MapPairs 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.