All Downloads are FREE. Search and download functionalities are using the official Maven repository.

epic.util.Arrays.scala Maven / Gradle / Ivy

The newest version!
package epic.util

import scala.reflect.ClassTag

/**
 * @author dlwh
 */
object Arrays {

  def fillArray(x: Int, y: Int, v: Double): Array[Array[Double]] = {
    val arr: Array[Array[Double]] = Array.ofDim[Double](x, y)
    if (v != 0.0) {
      var i: Int = 0
      while (i < x) {
        java.util.Arrays.fill(arr(i), v)
        i += 1
      }
    }
    arr
  }

  def concatenate(args: Array[Int]*): Array[Int] = {
    var totalLength: Int = 0
    for (a <- args) totalLength += a.length
    val ret: Array[Int] = new Array[Int](totalLength)
    var destPos: Int = 0
    for (a <- args) {
      System.arraycopy(a, 0, ret, destPos, a.length)
      destPos += a.length
    }
    ret
  }

  def concatenate[T:Manifest](args: Array[T]*): Array[T] = {
    var totalLength: Int = 0
    for (a <- args) totalLength += a.length
    val ret: Array[T] = new Array[T](totalLength)
    var destPos: Int = 0
    for (a <- args) {
      System.arraycopy(a, 0, ret, destPos, a.length)
      destPos += a.length
    }
    ret
  }


  def crossProduct[A,B,C](arr1: Array[A], arr2: Array[B])(f: (A,B) => C)(implicit man:ClassTag[C]): Array[C] = {
    val ret = new Array[C](arr1.length * arr2.length)
    var off = 0
    var i = 0
    while(i < arr1.length) {
      var j = 0
      while(j < arr2.length) {
        ret(off) = f(arr1(i), arr2(j))
        off += 1
        j += 1
      }
      i += 1
    }
    ret
  }

  /** Makes a arr1.length * arr2.length array, where entries are arr1(i) + arr2(j) * secondScale */
  def crossProduct(arr1: Array[Int], arr2: Array[Int], secondScale: Int): Array[Int] = {
    val ret = new Array[Int](arr1.length * arr2.length)
    var off = 0
    var i = 0
    while(i < arr1.length) {
      var j = 0
      while(j < arr2.length) {
        ret(off) = arr1(i) + arr2(j) * secondScale
        off += 1
        j += 1
      }
      i += 1
    }
    ret
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy