Scala 实现Python Arange

使用scala时有arange的需求,但是没有找到相对应函数,只找到了group,sliding函数,于是自己实现一个:

 

目标:

给定起点,终点和份数,得到arange结果

 

实现:

计算起始点长度与分类数,得到每一步的Step,然后循环添加即可。这里还加了隐式转换是为了函数传参类型转换。

  private implicit def doubleToFloat(number: Double): Float ={
    number.toFloat
  }

  private def getPercent(st: Float, end: Float, num: Int): Array[String] = {
    val step = (end - st) / num
    (0 to num).map(x => {
      val per = st + x * step
      per.formatted("%.2f")
    }).toArray
  }

 

结果:

1)小数

    val arange = getPercent(0,0.5,10)
    println(arange.mkString("\t"))
0.00	0.05	0.10	0.15	0.20	0.25	0.30	0.35	0.40	0.45	0.50

2)整数

    val arange = getPercent(10,100,10)
    println(arange.mkString("\t"))
10.00	19.00	28.00	37.00	46.00	55.00	64.00	73.00	82.00	91.00	100.00

 

额外:

顺便mark下group和sliding的用法

group:

把一批数据按group内的数字分组,最后不够拼成一组的单独成组:

    arange.grouped(2).foreach(x => println(x.mkString(" ")))
10.00 19.00
28.00 37.00
46.00 55.00
64.00 73.00
82.00 91.00
100.00

sliding:

第一个参数为窗口大小,第二个参数为移动步长,相当于从起始点拿一个窗口的数据,再走一个步长,再拿一个窗口,最后不够了就当独放出来:

    arange.sliding(3,4).foreach(x => println(x.mkString(" ")))
10.00 19.00 28.00
46.00 55.00 64.00
82.00 91.00 100.00

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章