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



我有多个相同维度的嵌套数组缓冲区。如何在Scala中对其中两个执行元素矩阵乘法?

我是Scala的新手,在将其转换为mllib库的Matrix数据类型时遇到了问题。有更简单的方法吗?还是我做错了?

您可以使用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在编译时检查矩阵类型,因此矩阵必须具有相同的数字表示。它不会在编译时检查矩阵的维度。

最新更新