使用Spire的Rationals的总和或产品(如何获得scala.Numeric)

时间:2013-05-06 10:50:50

标签: scala math numerical-methods spire

我认为这应该是直截了当的:

import spire.math.Rational

val seq  = Vector(Rational(1, 4), Rational(3, 4))
val sum  = seq.sum      // missing: scala.Numeric
val prod = seq.product  // missing: scala.Numeric

我想这只是将正确的东西带入隐含范围的问题。但是我要导入什么?

我可以看到,为了获得RationalIsNumeric,我必须做这样的事情:

import spire.math.Numeric._
implicit val err = new ApproximationContext(Rational(1, 192))
implicit val num = RationalIsNumeric

但这只给了我一个spire.math.Numeric。所以我另外尝试了这个:

import spire.math.compat._

但没有运气......

2 个答案:

答案 0 :(得分:8)

所需要的只是spire.math.compat.numeric[Rational]的证据:

import spire.math._

val seq = Vector(Rational(1, 4), Rational(3, 4))
implicit val num = compat.numeric[Rational]  // !
seq.sum     // --> 1/1
seq.product // --> 3/16

答案 1 :(得分:7)

值得注意的是,Spire提供了自己的sumproduct版本,并称之为qsumqproduct

import spire.implicits._
import spire.math._

Vector(Rational(1,3), Rational(1,2)).qsum // 5/6

Spire使用q为其所有集合方法添加前缀,以避免与Scala的内置方法冲突。这是一个(可能不完整)列表:

  • qsum
  • qproduct
  • qnorm
  • qmin
  • qmax
  • qmean
  • qsorted
  • qsortedBy
  • qsortedWith
  • qselected
  • qshuffled
  • qsampled
  • qchoose

对不起,我来晚了一点,我是StackOverflow的新手。