Bil*_*kat 11 unboxing haskell missing-data
我正在尝试使用Haskell进行数据分析.因为我的数据集相当大(数十万甚至数百万的观测值),所以我最好使用未装箱的数据结构来提高效率,比如Data.Vector.Unboxed.
问题是数据包含一些缺失值.我想避免将它们编码为"99"或类似,因为这只是一个丑陋的黑客和潜在的错误来源.从我的Haskell新手的角度来看,我可以想到以下选项:
Maybe值的盒装矢量.有点像(请纠正错误):data myMaybe a = Nothing | Just {-# UNPACK #-} !anewtype instance Data.Vector.Unboxed.Vector (MyDatum a) = MyDatum (Data.Vector.Unboxed.Vector (Bool,a))Int为Bool),但唯一的答案似乎没有明确解决丢失的问题值/稀疏性(而是关注如何表示整个数组未装箱,而不是作为未装箱矢量的盒装矢量).我试图保持在矢量表示而不是像这样的东西,因为它是稀疏的缺失值,而不是数据.
任何关于这些选项的相对优点/可行性/现成可用性/可能性能的评论,或者确实指向完全不同的替代品,都是受欢迎的!
编辑:
我会选择选项3,但是你不应该使用向量来存储缺少的indizes:这会给你O(nMissing)查找时间,除非丢失的数据非常稀疏,否则它会非常慢.Data.IntMap应该做好这项工作,然后您可以轻松地使用该member功能来检查索引是否指向缺少的观察.哈希表甚至更好,但可能没有必要.