오늘의 인기 글
최근 글
최근 댓글
Today
Total
11-16 07:38
관리 메뉴

우노

[Spark] Breeze의 Vector, Matrix 연산 본문

Data/Spark

[Spark] Breeze의 Vector, Matrix 연산

운호(Noah) 2020. 7. 9. 14:12

참고 사이트

Breeze의 Vector ( SparseVector , DenseVector)

// 각 SparseVector, DenseVector 라이브러리 호출
import breeze.linalg.SparseVector
import breeze.linalg.DenseVector

// SparseVector 생성 (컬럼형태)
val sv = new SparseVector(Array(0,2), Array(1,2), 3)

// DenseVector 생성 (컬럼형태)
val dv = new DenseVector(Array(1,2,3))

// breeze가 제공하는 vector 연산 경우의 수
sv dot sv // SparseVector x SparseVector
sv dot dv // SparseVector x DenseVector
dv dot sv // DenseVector x SparseVector
dv dot dv // DenseVector x DenseVector

Breeze의 Matrix ( CSCMatrix , DenseMatrix )

  • CSCMatrix

      // CSCMatrix 라이브러리 호출
      import breeze.linalg.CSCMatrix
    
      // CSCMatrix(로우형식) 생성
      // 각 튜플이 로우형식으로 들어간다.
      val bz_sm = CSCMatrix((1,0),(11,0),(0,1))
    
      // CSCMatrix(CSC형식) 생성
      // 열 순서대로 데이터 배열(values), 행크기(numRows), 열크기(numCols), 열 압축 정보 배열(colPtrs), 열 순서대로 데이터의 행 인덱스 배열(rowIndices)
      val bz_sm1 = new CSCMatrix(Array(1.0,7.0,3.0), 2, 3, Array(0,1,2,3), Array(0,1,0))
    
      // CSCMatrix(COO형식) 생성
      // 행렬좌표형식의 튜플을 하나씩 넣어 생성하는 방식
      val builder = new CSCMatrix.Builder[Double](rows=3, cols=2)
      builder.add(0,0, 1)
      builder.add(1,1, 5)
      builder.add(2,1, 6)
      val bz_sm2 = builder.result()
    
      // CSCMatrix(COO형식) 생성
      // 행렬좌표형식의 파일을 사용해 생성하는 방식
      val rdd =  sc.textFile("s3://non-square-matrix/M_633432_10000_55420_0.000009.txt/part-00000")
      val rdd_line = rdd.map(x => x.split(" ")).map(x => (x(0).toInt,x(1).toInt,x(2).toDouble)).collect
      val builder = new CSCMatrix.Builder[Double](rows=633432,cols=10000)
      for (x <- rdd_line)
          builder.add(x._1,x._2,x._3)
      val bz_sm3 = builder.result()
    
      // breeze가 제공하는 CSCMatrix 연산 경우의 수
      bz_sm * bz_sm.t    // SparseMatrix x SparseMatrix = SparseMatrix
      bz_sm * bz_dm.t    // SparseMatrix x DenseMatrix = DenseMatrix
    
      bz_sm.t * sv       // SparseMatrix x SparseVector
      bz_sm.t * dv       // SparseMatrix x DenseVector
    
      sv.t * bz_sm       // SparseVector x SparseMatrix
      dv.t * bz_sm       // DenseVector x SparseMatrix
  • DenseMatrix

      // DenseMatrix 라이브러리 호출
      import breeze.linalg.DenseMatrix
    
      // 3 x 2 DenseMatrix 생성
      // 컬럼순서대로 생성된다.
      val bz_dm = new DenseMatrix(3,2,Array(1,11,0,0,0,1))
    
      // 요소가 전부 0으로 채워진 DenseMatrix 생성
      val bz_dm1 = DenseMatrix.zeros[Double](10,10)
    
      // breeze가 제공하는 DenseMatrix 연산 경우의 수
      bz_sm * bz_dm.t     // DenseMatrix x SparseMatrix = DenseMatrix
      bz_dm * bz_dm.t     // DenseMatrix x DenseMatrix = DenseMatrix
    
      bz_dm.t * sv        // DenseMatrix x SparseVector
      bz_dm.t * dv        // DenseMatrix x DenseVector 
    
      dv.t * bz_dm        // DenseVector x DenseMatrix 

결론

  • Breeze는 SparseVector x DenseMatrix를 제외한 15가지 곱셈 가능!
Comments