我需要使用 3 个维度的查找表。该表本身具有 73x73x73 (389017) 个双精度值。
module Hammer.Texture.Table3D where
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
import Data.Vector.Unboxed (Vector)
table3D :: V.Vector (V.Vector (Vector Double))
table3D = V.fromList [table0, table1, ... table72]
table0 = V.fromList $ map U.fromList [
[1.973921e+01, 0.000000e+00, ... 0.000000e+00],
.....
[1.973921e+01, 0.000000e+00, ... 0.000000e+00]]
.....
table72 = V.fromList $ map U.fromList [
[1.973921e+01, 0.000000e+00, ... 0.000000e+00],
.....
[1.973921e+01, 0.000000e+00, ... 0.000000e+00]]
问题是 GHC 无法处理 Vector Double 或 [Double] 的这种大小,GHC 编译需要很长时间(~ 2 分钟),直到最后内存爆炸。GHC 上似乎存在内存泄漏或一些错误,因为它适用于非常大的字符串 ([Char])。
有哪些解决方案(如果有)可用于使用 GHC 创建“大型”查找表(Double 类型)?