Github user sethah commented on a diff in the pull request:

    https://github.com/apache/spark/pull/15628#discussion_r107801091
  
    --- Diff: 
mllib-local/src/main/scala/org/apache/spark/ml/linalg/Matrices.scala ---
    @@ -161,6 +162,118 @@ sealed trait Matrix extends Serializable {
        */
       @Since("2.0.0")
       def numActives: Int
    +
    +  /**
    +   * Converts this matrix to a sparse matrix.
    +   *
    +   * @param colMajor Whether the values of the resulting sparse matrix 
should be in column major
    +   *                    or row major order. If `false`, resulting matrix 
will be row major.
    +   */
    +  private[ml] def toSparseMatrix(colMajor: Boolean): SparseMatrix
    +
    +  /**
    +   * Converts this matrix to a sparse matrix in column major order.
    +   */
    +  @Since("2.2.0")
    +  def toSparseColMajor: SparseMatrix = toSparseMatrix(colMajor = true)
    +
    +  /**
    +   * Converts this matrix to a sparse matrix in row major order.
    +   */
    +  @Since("2.2.0")
    +  def toSparseRowMajor: SparseMatrix = toSparseMatrix(colMajor = false)
    +
    +  /**
    +   * Converts this matrix to a sparse matrix in column major order.
    +   */
    +  @Since("2.2.0")
    +  def toSparse: SparseMatrix = toSparseMatrix(colMajor = true)
    +
    +  /**
    +   * Converts this matrix to a dense matrix.
    +   *
    +   * @param colMajor Whether the values of the resulting dense matrix 
should be in column major
    +   *                    or row major order. If `false`, resulting matrix 
will be row major.
    +   */
    +  private[ml] def toDenseMatrix(colMajor: Boolean): DenseMatrix
    +
    +  /**
    +   * Converts this matrix to a dense matrix in column major order.
    +   */
    +  @Since("2.2.0")
    +  def toDense: DenseMatrix = toDenseMatrix(colMajor = true)
    +
    +  /**
    +   * Converts this matrix to a dense matrix in row major order.
    +   */
    +  @Since("2.2.0")
    +  def toDenseRowMajor: DenseMatrix = toDenseMatrix(colMajor = false)
    +
    +  /**
    +   * Converts this matrix to a dense matrix in column major order.
    +   */
    +  @Since("2.2.0")
    +  def toDenseColMajor: DenseMatrix = toDenseMatrix(colMajor = true)
    +
    +  /**
    +   * Returns a matrix in dense or sparse column major format, whichever 
uses less storage.
    +   */
    +  @Since("2.2.0")
    +  def compressedColMajor: Matrix = {
    +    if (getDenseSizeInBytes < getSparseSizeInBytes(colMajor = true)) {
    +      toDenseColMajor
    +    } else {
    +      toSparseColMajor
    +    }
    +  }
    +
    +  /**
    +   * Returns a matrix in dense or sparse row major format, whichever uses 
less storage.
    +   */
    +  @Since("2.2.0")
    +  def compressedRowMajor: Matrix = {
    +    if (getDenseSizeInBytes < getSparseSizeInBytes(colMajor = false)) {
    +      toDenseRowMajor
    +    } else {
    +      toSparseRowMajor
    +    }
    +  }
    +
    +  /**
    +   * Returns a matrix in dense column major, dense row major, sparse row 
major, or sparse column
    +   * major format, whichever uses less storage. When dense representation 
is optimal, it maintains
    +   * the current layout order.
    +   */
    +  @Since("2.2.0")
    +  def compressed: Matrix = {
    +    val cscSize = getSparseSizeInBytes(colMajor = true)
    +    val csrSize = getSparseSizeInBytes(colMajor = false)
    +    if (getDenseSizeInBytes < math.min(cscSize, csrSize)) {
    +      // dense matrix size is the same for column major and row major, so 
maintain current layout
    +      toDenseMatrix(!isTransposed)
    +    } else {
    +      if (cscSize <= csrSize) {
    +        toSparseMatrix(colMajor = true)
    --- End diff --
    
    Done


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to