如何在scala中按元素相乘两个嵌套数组缓冲区?

t9eec4r0  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(455)

我有多个相同维度的嵌套数组缓冲区。如何在scala中对其中的两个执行按元素的矩阵乘法?
我是scala新手,在将其转换为mllib库的矩阵数据类型时遇到问题。有更简单的方法吗?还是我做错了?

evrscar2

evrscar21#

您可以使用breeze来代替spark矩阵,因为它是scala中使用最多的线性代数库。如果您习惯于与numpy或scipy一起工作,那么与breeze一起工作也是类似的。您可以在中检查所有可用的操作https://github.com/scalanlp/breeze/wiki/linear-algebra-cheat-sheet.
可以内联构建密集矩阵:

import breeze.linalg._

val dense1 = DenseMatrix((2,2), (2,2))
val dense2 = DenseMatrix((4,4), (4,4))

并应用元素产品:

println(dense1 *:* dense2)

/* 8  8  
   8  8 */

如果有数组表示形式:

val arr1 = Array(Array(2,2), Array(2,2)).flatten
val arr2 = Array(Array(4,4), Array(4,4)).flatten

val dense3 = new DenseMatrix(2,2, arr1)
val dense4 = new DenseMatrix(2,2, arr2)

println(dense3 *:* dense4)

/* 8  8  
   8  8 */

您需要知道,与numpy/pyhton不同,breeze在编译时检查矩阵类型,因此矩阵必须具有相同的数值表示形式。它没有´t在编译时检查矩阵的维数。

相关问题