我编写了一个程序来分析包含文件的样本数据。目前,我的程序将样本读入一个列表,然后我对样本列表 ( [Float]
) 执行进一步的分析/处理。
我对性能不太满意,我正在考虑使用数组而不是列表来获得更好的性能。我也在研究并行化我的实现,Data.Array.Repa
看起来很有希望。
目前,从文件中读取是这样的:
- 我将所有样本读入一个
ByteString
, 使用hGet
. - 我知道每个样本由 3 个字节表示,所以我将s分组
ByteString
为 3 个的列表。ByteString
- 我将我的
toFloat
函数映射ByteString
到 s 列表上以获取Float
s 列表。
这导致[Float]
我分析以获得所需的信息。
我想知道我应该在这个过程的哪个步骤开始使用数组。我首先想到的是使用该listArray
函数将 my[Float]
转换为浮点数组。我不确定,但这似乎不是最有效的方法。
是否可以Data.Array.Repa.fromFunction
在步骤 2 之后立即使用构造数组并跳过中间[Float]
?对于该功能,我可以使用类似的东西(map toFloat bsList)
吗?分组后bsList
的 s 列表在哪里。ByteString
或者有没有办法将样本直接读入数组?