package com.xuanyuansen.algo
import breeze.linalg._
import breeze.numerics.exp

/**
 * Created by wangshuai on 16/7/14.
 */
object funcTest {
  def main(args: Array[String]) {
    val x = DenseVector.ones[Double](2)
    val y = DenseVector.ones[Double](2)
    println(x)
    println(1.0 - x dot y)
    println(1.0 - x :* y)
    println(DenseVector.vertcat(x, y))
    val Wf = DenseMatrix.rand[Double](4, 2)
    println(Wf)

    val input_dim = 4
    val out_dim = 2
    val concat_len = input_dim + out_dim

    val WW = DenseMatrix.ones[Double](out_dim, concat_len) //2*6
    val kk = DenseMatrix.ones[Double](concat_len, 1)
    println("WW * kk")
    val tmp = (WW * kk).asInstanceOf[DenseMatrix[Double]]

    println(tmp)

    val diffo = DenseMatrix.ones[Double](1, out_dim)
    val input_h = DenseMatrix.ones[Double](1, out_dim)
    val input_x = DenseMatrix.ones[Double](1, input_dim) + DenseMatrix.ones[Double](1, input_dim)

    // 1*2 1*2
    val dinputh = diffo.t * input_h
    println(dinputh) //2*2

    //1*2 1*4
    val dinputx = diffo.t * input_x
    println(dinputx) //2*4

    val out = DenseMatrix.horzcat(dinputx, dinputh)
    //concat 2*6
    println(out)

    val softmax = exp(kk)
    println(softmax)
    val sumsoft = sum(softmax)

    val finalout = softmax / sumsoft
    println("finalout " + finalout.toString)
    val test = DenseMatrix.rand[Double](2, 3)
    println(test)
    val idx_max = argmax(test)
    println(idx_max)
    println(max(test))
    val z = DenseMatrix.zeros[Double](2, 3)
    z(idx_max) = 1
    println(z)
    println(sum(exp(test)) - max(test))

    println((0 until 4).reverse)

    val zout = 2.0 * DenseMatrix.ones[Double](2, 3)
    println(zout)
    println(1.0 / zout + 6.0)

    val out1 = DenseMatrix.create(5, 1, Array(1, 2, 3, 4, 5))
    println(out1)

  }
}