如何获得我需要的 VectorSpace 的隐式实例?
How do I get the implicit instance of the VectorSpace I need?
我正在尝试使用spire来制作我写的更通用的线性插值函数
def interpolate(pointA: (Double,Double), pointB: (Double,Double), point: Double): Double = {
((pointB._1 - pointA._1) / (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}
我意识到这可以变得更通用,因为您可以通过这种方式插入任何向量空间的元素。所以我把它改成这样:
def interpolate[V,F](pointA: (V,F), pointB: (V,F), point: F)(implicit vs: VectorSpace[V,F]): V = {
import spire.implicits._
implicit val field: algebra.Field[F] = vs.scalar
((pointB._1 - pointA._1) :/ (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}
然而,当我尝试这样使用它时:
import spire.implicits._
private val ints = interpolate((Vector(1,2,3),2.0),(Vector(4,5,6),3.0),7.0)
它说找不到 VectorSpace[Seq[Int],Double]
的隐含项。有没有办法获得我需要的 VectorSpace 实例?我是否必须为我需要的每种类型手动定义一个?
我试图定义一个隐式方法,该方法通过为 Vector 类型采用 AdditiveAbGroup 和为字段类型采用 Field 来生成 VectorSpace,但我无法编译它。
错误说,找不到 VectorSpace[Seq[Int],Double]
的实例,这正是问题所在。因为在向量空间中,向量必须能被标量场整除,所以在 VectorSpace 中不能有整数向量。类型也需要相同,所以
import spire.implicits._
private val ints = interpolate((Vector(1.0,2.0,3.0),2.0),(Vector(4.0,5.0,6.0),3.0),7.0)
工作正常。
我正在尝试使用spire来制作我写的更通用的线性插值函数
def interpolate(pointA: (Double,Double), pointB: (Double,Double), point: Double): Double = {
((pointB._1 - pointA._1) / (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}
我意识到这可以变得更通用,因为您可以通过这种方式插入任何向量空间的元素。所以我把它改成这样:
def interpolate[V,F](pointA: (V,F), pointB: (V,F), point: F)(implicit vs: VectorSpace[V,F]): V = {
import spire.implicits._
implicit val field: algebra.Field[F] = vs.scalar
((pointB._1 - pointA._1) :/ (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}
然而,当我尝试这样使用它时:
import spire.implicits._
private val ints = interpolate((Vector(1,2,3),2.0),(Vector(4,5,6),3.0),7.0)
它说找不到 VectorSpace[Seq[Int],Double]
的隐含项。有没有办法获得我需要的 VectorSpace 实例?我是否必须为我需要的每种类型手动定义一个?
我试图定义一个隐式方法,该方法通过为 Vector 类型采用 AdditiveAbGroup 和为字段类型采用 Field 来生成 VectorSpace,但我无法编译它。
错误说,找不到 VectorSpace[Seq[Int],Double]
的实例,这正是问题所在。因为在向量空间中,向量必须能被标量场整除,所以在 VectorSpace 中不能有整数向量。类型也需要相同,所以
import spire.implicits._
private val ints = interpolate((Vector(1.0,2.0,3.0),2.0),(Vector(4.0,5.0,6.0),3.0),7.0)
工作正常。