Я пытаюсь использовать Haskell для анализа данных. Поскольку мои наборы данных достаточно велики (сотни тысяч и, возможно, миллионы наблюдений), я в идеале хотел бы использовать неупакованную структуру данных для повышения эффективности, скажем, Data.Vector.Unboxed.
Проблема в том, что данные содержат некоторые пропущенные значения. Я не хочу кодировать их как «99» или что-то подобное, потому что это просто уродливый взлом и потенциальный источник ошибок. С точки зрения новичка в Haskell, я могу думать о следующих вариантах:
Maybe
. Что-то вроде (исправьте, если ошиблись): data myMaybe a = Nothing | Просто {- # UNPACK # -}! A
экземпляр newtype Data.Vector.Unboxed.Vector (MyDatum a) = MyDatum (Data. Vector.Unboxed.Vector (Bool, a))
Int
для Bool
]), но единственный ответ, похоже, явно не решает проблему отсутствующих значений / разреженности (вместо этого фокусируется на том, как представить весь массив без упаковки, а не как упакованный вектор из распакованных векторов).Я пытаюсь придерживаться векторного представления, а не чего-то вроде этого , потому что это пропущенные значения , которые редки, а не данные .
Любые комментарии относительно относительных достоинств / осуществимости / готовой доступности / вероятной производительности этих опций или даже указатели на совершенно другие альтернативы приветствуются!
Изменить: