我有多个相同维度的嵌套数组缓冲区。如何在scala中对其中的两个执行按元素的矩阵乘法?我是scala新手,在将其转换为mllib库的矩阵数据类型时遇到问题。有更简单的方法吗?还是我做错了?
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在编译时检查矩阵的维数。
1条答案
按热度按时间evrscar21#
您可以使用breeze来代替spark矩阵,因为它是scala中使用最多的线性代数库。如果您习惯于与numpy或scipy一起工作,那么与breeze一起工作也是类似的。您可以在中检查所有可用的操作https://github.com/scalanlp/breeze/wiki/linear-algebra-cheat-sheet.
可以内联构建密集矩阵:
并应用元素产品:
如果有数组表示形式:
您需要知道,与numpy/pyhton不同,breeze在编译时检查矩阵类型,因此矩阵必须具有相同的数值表示形式。它没有´t在编译时检查矩阵的维数。