【问题标题】:pyspark.mllib DenseMatrix multiplicationpyspark.mllib 密集矩阵乘法
【发布时间】:2016-07-19 11:40:38
【问题描述】:

我必须在 PySpark 中进行矩阵乘法,但找不到使用 DenseMatrix 的方法。例如

from pyspark.mllib.linalg import DenseMatrix

Q = DenseMatrix(nfeatures, nfeatures, [1, 0, 0, 0, 1, 0, 0, 0, 1])
w = DenseMatrix(nfeatures, 1, [0, 0, 0])
print( Q * w )

导致以下错误:

TypeError: unsupported operand type(s) for *: 'DenseMatrix' and 'DenseMatrix'

我做错了什么?有没有做矩阵乘法的方法? PySpark 流式处理的常用方法是什么?

最好的问候, 诺莉亚

【问题讨论】:

    标签: apache-spark pyspark apache-spark-mllib matrix-multiplication


    【解决方案1】:

    pyspark.ml.linalg.Matrixpyspark.mllib.linalg.Matrix 都没有实现矩阵乘法。这些类主要用作mllib / ml 算法的交换格式,并非旨在用作线性代数的全功能数据结构。

    如果您需要的不仅仅是将数据传递给某些 ML / MLlib 算法,只需使用标准 NumPy / SciPy 堆栈。

    【讨论】:

    • 感谢您的回答。我假设一旦我们将toArray() 转换为使用标准的 numpy linalg 函数,我们就放弃了乘法时任何潜在的并行化?我看到您的回复here,您建议使用 BlockMatrix。海报不能转换为 BlockMatrix 并在那里以并行方式进行乘法吗?
    • @Rhubarb pyspark.{ml|mllib}.linalg.DenseMatrix 根本没有分发。并行化将取决于底层的线性代数库。关于转换为BlockMatrix - 只要数据适合具有良好本机绑定的内存矩阵乘法,就会快一个数量级。所以像这样的转换很少有意义。但从技术上讲,这是可能的。
    • 谢谢,我就是这么想的。只要它适合内存,尝试“并行化”矢量化操作就没有意义。对吗?
    • @Rhubarb 是的。这通常适用于任何小型结构。
    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 2014-03-06
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2021-07-18
    相关资源
    最近更新 更多