我很好奇我如何编写一个通用方法来计算scala中的标准偏差和方差.我有一个计算均值的通用方法(从这里被盗:在Scala中编写通用的平均函数)
我试图将平均值计算转换为标准偏差和方差但我看起来不对.此外,泛型在Scala编程方面超越了我的技能.
计算均值,标准差和方差的代码如下:
package ca.mikelavender
import scala.math.{Fractional, Integral, Numeric, _}
package object genericstats {
def stdDev[T: Numeric](xs: Iterable[T]): Double = sqrt(variance(xs))
def variance[T: Numeric](xs: Iterable[T]): Double = implicitly[Numeric[T]] match {
case num: Fractional[_] => {
val avg = mean(xs)
num.toDouble(
xs.foldLeft(num.zero)((b, a) =>
num.plus(b, num.times(num.minus(a, avg), num.minus(a, avg))))) /
xs.size
}
case num: Integral[_] => {
val avg = mean(xs)
num.toDouble(
xs.foldLeft(num.zero)((b, a) =>
num.plus(b, num.times(num.minus(a, avg), num.minus(a, avg))))) /
xs.size
}
}
/**
* https://stackoverflow.com/questions/6188990/writing-a-generic-mean-function-in-scala
*/
def …Run Code Online (Sandbox Code Playgroud) 我想要做的是在Scala中对List对象进行排序,而不是对列表中的元素进行排序.例如,如果我有两个Ints列表:
val l1 = List(1, 2, 3, 7)
val l2 = List(1, 2, 3, 4, 10)
Run Code Online (Sandbox Code Playgroud)
我希望能够按顺序将它们放在l1> l2中.
我已经创建了一个案例类来完成我需要它,但问题是,当我使用它时,我的其他任何方法都不起作用.我是否需要在类中实现所有其他方法,即flatten,sortWith等?
我的类代码如下所示:
class ItemSet(itemSet: List[Int]) extends Ordered[ItemSet] {
val iSet: List[Int] = itemSet
def compare(that: ItemSet) = {
val thisSize = this.iSet.size
val thatSize = that.iSet.size
val hint = List(thisSize, thatSize).min
var result = 0
var loop = 0
val ths = this.iSet.toArray
val tht = that.iSet.toArray
while (loop < hint && result == 0) {
result = ths(loop).compare(tht(loop))
loop += 1 …Run Code Online (Sandbox Code Playgroud) 我是R的新手,无法掌握这个概念.假设我有一个名为"places"的表格,其中包含3个列 - 城市,人口和夏季平均温度
假设我想"过滤" - 产生一个新的表格对象,其中人口少于100万,夏季平均温度大于70度.
在我使用的任何其他程序中,这将非常简单,但是我做了一些研究,我正在努力让自己陷入更大的困惑.鉴于R的目的和它的作用,这必须是非常简单的东西.
我如何将上述条件应用于表格?步骤是什么?根据我的理解,我不能轻易地根据他们的名字选择表格标题,这样会很好(例如WHERE city <1,000,000)
我有两个数组(我已经退出矩阵(Array [Array [Int]]),我需要从另一个中减去一个.
目前我正在使用这种方法,当我对它进行分析时,它就是瓶颈.
def subRows(a: Array[Int], b: Array[Int], sizeHint: Int): Array[Int] = {
val l: Array[Int] = new Array(sizeHint)
var i = 0
while (i < sizeHint) {
l(i) = a(i) - b(i)
i += 1
}
l
}
Run Code Online (Sandbox Code Playgroud)
我需要做数十亿次,所以速度的提高是有利的.
我已经尝试使用a List而不是a Array来收集差异并且速度更快但是当我将其转换回来时我失去了所有好处Array.
我确实修改了下游代码,List看看是否会有所帮助,但我需要不按顺序访问列表中的内容,所以再次失去任何收益.
似乎任何一种类型的转换都是昂贵的,我想知道是否有某种方法可以使用可能更快的地图等.
有没有更好的办法?
不知道我第一次做了什么!?
所以我用来测试它的代码是这样的:
def subRowsArray(a: Array[Int], b: Array[Int], sizeHint: Int): Array[Int] = {
val l: Array[Int] = new Array(sizeHint)
var i = 0
while (i < sizeHint) …Run Code Online (Sandbox Code Playgroud)