我应该使用Scala的NaN还是“指标向量”?

时间:2016-10-25 15:27:08

标签: scala scala-breeze

我基于一个相当复杂的数学算法构建了一个程序。在这个我想要考虑具有缺失值的向量,所以NaN。到目前为止,我通过使用两个向量实现了这两个向量 - 都使用breeze的DenseVector[Double]实现:包含实际值的向量location和向量evidence,其中1.0表示值存在,值0.0表示值不存在。有了这个,我可以这样做:

val ones = DenseVector.ones[Double](one.evidence.length)
val derivedLocation = one.evidence :* one.location :+ ((ones :- one.evidence) :* two.evidence :* two.location)

另一个例子是:

val firstnewvector = myothervector(evidence :== 1.0)
val secondnewvector = myothervector(evidence :== 0.0)

但我还有其他一些例子,其中我确实需要0而不是NaN:

def gradientAt: DenseVector[Double] =
      (one.location - two.location) :* evidence :* othervalue

为了论证,这个例子已经简化了。我正在考虑放弃evidence并使用没有具体值的NaN,但我不确定这是否是个好主意。我认为实施上述线路可能已经比较困难了,不是吗?另外,我不确定性能。 DenseVector由包含Java原语的数组支持,并且如果我没有弄错的话,可以防止慢速自动装箱。使用Double.NaN可能需要类而不是原语,并且可能会降低整个程序的速度并降低内存成本 - 是吗? (速度和记忆力一般都是个问题。)

所以:在我的情况下,使用Double.NaN或考虑1)良好的代码和2)性能(内存和速度)是不是一个好主意?

0 个答案:

没有答案
相关问题