我试图在微风中建立一个向量的DenseMatrix。然而,我一直得到错误信息:
could not find implicit value for evidence parameter of type breeze.storage.Zero[breeze.linalg.DenseVector[Double]]
:
val som: DenseMatrix[DenseVector[Double]] = DenseMatrix.tabulate(5, 5){ (i, j) => DenseVector.rand(20)}
即使用Scala数组做类似的事情也可以:
val som = Array.tabulate(5, 5)((i, j) => DenseVector.rand(20))
我不确定是我做错了什么还是我错过了什么?老实说,我不明白错误信息在告诉我什么……我没有做足够的Scala编程来理解这个?什么是Evidence参数,我可以显式地指定它还是需要隐式地指定它?
这是因为DenseMatrix.tabulate[V]
首先用零填充矩阵。因此,对于V
,应该有一个类型类Zero
的实例,即在我们的DenseVector[Double]
的情况下。你可以自己定义,例如
implicit def denseVectorZero[V: Zero : ClassTag]: Zero[DenseVector[V]] =
new Zero(DenseVector.zeros(0))
。如果我们知道Zero
对应V
,那么我们就知道Zero
对应DenseVector[V]
。
或者更简单
implicit def ev[V: ClassTag]: Zero[DenseVector[V]] = new Zero(DenseVector(Array.empty))