스칼라의 Array의 transpose는 행렬 연산과 관련된 메소드이다. 


M X N의 행렬을 N X M의 행렬로 변경한다.



<코드 #1>


val x = Array(Array(1,2), Array(3,4))

val z = x.transpose


<결과 #1>

x: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))
z: Array[Array[Int]] = Array(Array(1, 3), Array(2, 4))




<코드 #2>

val x = Array(Array(1,2), Array(3,4), Array(5,6))

val z = x.transpose


<결과 #2>

x: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4), Array(5, 6))
z: Array[Array[Int]] = Array(Array(1, 3, 5), Array(2, 4, 6))



<코드 #3>


val a = Map (

   10 -> List("20x", "10y", "10z"),

   29 -> List("29a", "29b", "29c")

)


val b = a.map { case (k, v) =>

  v.map(k -> _)

}


val c = b.toList


val d = c.transpose


val e = d.map(_.toMap)


<결과 #4>

a: scala.collection.immutable.Map[Int,List[String]] = Map(10 -> List(20x, 10y, 10z), 29 -> List(29a, 29b, 29c))
b: scala.collection.immutable.Iterable[List[(Int, String)]] = List(List((10,20x), (10,10y), (10,10z)), List((29,29a), (29,29b), (29,29c)))
c: List[List[(Int, String)]] = List(List((10,20x), (10,10y), (10,10z)), List((29,29a), (29,29b), (29,29c)))
d: List[List[(Int, String)]] = List(List((10,20x), (29,29a)), List((10,10y), (29,29b)), List((10,10z), (29,29c)))
e: List[scala.collection.immutable.Map[Int,String]] = List(Map(10 -> 20x, 29 -> 29a), Map(10 -> 10y, 29 -> 29b), Map(10 -> 10z, 29 -> 29c))



<코드 #5>

val test = """ 

a 1

b 2

"""


val a = test.split('\n').filter(!_.trim.isEmpty)

val b = a.map(_.split("[ ]+"))

val c = b.transpose

val d = c.map(_.mkString("x"))


<결과 #5>


a: Array[String] = Array(a 1, b 2)
b: Array[Array[String]] = Array(Array(a, 1), Array(b, 2))
c: Array[Array[String]] = Array(Array(a, b), Array(1, 2))
d: Array[String] = Array(axb, 1x2)




Posted by '김용환'
,