2016-12-18 4 views
0

다른 행렬 행렬을 분할하려면다음과 같이 I 스칼라 두 행렬 (X 및 Y)를 초기화 한 방법 스칼라

var x = ofDim[Int](a1,b1) 
var y = ofDim[Int](a2,b2) 

X는 Y, A1, A2, B1 및 B2는 변수이다. 이제 X를 Y (X/Y)로 결정해야합니다. 그것을 어떻게 성취 할 수 있습니까?

+0

엘멘 방향 분할 또는 'XY^(- 1)'매트릭스 곱셈을 의미합니까? – Psidom

+0

@Psidom, A, X, Y가 행렬이고 AX = Y이고 A와 Y가 알려진 행렬이라면 X 행렬이 필요합니다. XY^(- 1)이어야한다고 생각합니다. –

+0

breeze 라이브러리를 확인하고 벡터 및 행렬로 선형 대수학을 구현할 수 있습니다. 그러나 rdd를 다루고 싶다면 또 다른 문제입니다. – Psidom

답변

2

Apache Commons를 사용하는 다른 접근법입니다. 그러나, 중요이 나눗셈 연산은 곱셈 및 역변환 연산을 적용하고, 어떤 행렬 inversable하고 관찰 다른 번호

import org.apache.commons.math3.linear._ 

object Study { 

    def main(args: Array[String]): Unit = { 

    val xArray = Array(Array(1.0, 2.0), Array(3.0, 4.0)) 
    val yArray = Array(Array(1.0, 2.0), Array(3.0, 4.0)) 

    val x = new Array2DRowRealMatrix(xArray) 
    val y = new Array2DRowRealMatrix(yArray) 

    val yInverse = new LUDecomposition(y).getSolver().getInverse(); 
    val w = x.multiply(yInverse) 

    for(i <- 0 until w.getRowDimension()) 
     for(j <- 0 until w.getColumnDimension()) 
      println(w.getEntry(i, j)) 

    } 
} 
: https://en.wikipedia.org/wiki/Invertible_matrix

다음 예는 라이브러리 아파치 가공 (Study.scala)을 적용

팁 : 스칼라 콘솔을 사용하려는 경우, 당신은 ... 클래스 경로를 지정해야합니다

scala -classpath .../commons-math3/3.2/commons-math3-3.2.jar 
,536 당신이 알고리즘을로드 스칼라 세션에서

... ...

:load .../Study.scala 
... 그 결과는 연구의 주요 함수를 호출 나올 (근사치 적용 할 수 있습니다) ...

scala> Study.main(null)             

0.99/1.11E-16/0.0/1.02

1

봅니다 : 다른 응답에 mecioned로

import breeze.linalg.{DenseMatrix, inv} 

val mx = new DenseMatrix(a1, b1, x.transpose.flatten) 
val my = new DenseMatrix(a2, b2, y.transpose.flatten) 

mx * inv(my) 
1

도서관 Beeze, 필요합니다. 당신은 브리즈 프로젝트는 GitHub

이것은 메이븐 접근 방식에서 다운로드 할 수 있습니다

SBT 또는 Maven을 사용하여 설치할 수 있습니다 ...

<dependency> 
    <groupId>org.scalanlp</groupId> 
    <artifactId>breeze_2.10</artifactId> <!-- or 2.11 --> 
    <version>0.12</version> 
</dependency> 

코드를

import breeze.linalg.DenseMatrix 

object Division { 

    def main(args: Array[String]): Unit = { 

     var a1 = 10 
     var a2 = 11 
     var b1 = 12 
     var b2 = 13 

     //var x = Array.ofDim[Int](a1,b1) 
     //var y = Array.ofDim[Int](a2,b2) 

     var x = DenseMatrix(a1,b1) 
     var y = DenseMatrix(a2,b2) 

     var result = x/y 
     print(result) 
    } 
}