一旦我回顾了对我而言至关重要的Haskell数组库的功能,并编译了一个比较表(仅电子表格:直接链接)。所以我会尽力回答。
我应该在什么基础上选择Vector.Unboxed和UArray?它们都是未装箱的数组,但Vector抽象似乎广为宣传,尤其是在循环融合方面。Vector总是更好吗?如果没有,我什么时候应该使用哪种表示形式?
如果需要二维或多维数组,则最好使用UArray而不是Vector。但是Vector有更好的API来处理向量。通常,Vector不太适合模拟多维数组。
Vector.Unboxed不能与并行策略一起使用。我怀疑不能同时使用UArray,但是至少很容易从UArray切换到盒装Array,看看并行化是否带来的好处超过了装箱成本。
对于彩色图像,我希望存储三位16位整数或三位单精度浮点数。为此,Vector或UArray是否更易于使用?表现更好?
我尝试使用数组表示图像(尽管我只需要灰度图像)。对于彩色图像,我使用Codec-Image-DevIL库读取/写入图像(绑定到DevIL库),对于灰度图像,我使用pgm库(纯Haskell)。
我对Array的主要问题是,它仅提供随机访问存储,但是它不提供许多构建Array算法的方法,也没有随便使用数组例程库(不与线性代数库接口,不允许表达卷积,fft和其他变换)。
几乎每次必须从现有阵列中构建一个新数组时,都必须构造一个中间值列表(就像Gentle Introduction 中的矩阵乘法一样)。数组构建的成本通常超过了更快的随机访问带来的好处,以至于在我的一些用例中
本文探讨了在Haskell中选择多维数组表示形式的考虑因素,包括Vector.Unboxed、UArray和Array。内容涉及到不同数组类型的性能、适用场景,特别是在数值计算、并行处理和图像处理中的应用。作者指出,对于二维或多维数组,UArray可能更适合,而Vector在API方面更强大。此外,文章还提到了Hmatrix和Repa库在矩阵运算和算法上的优势,以及对OpenCV绑定的潜在使用和限制。
最低0.47元/天 解锁文章

1万+

被折叠的 条评论
为什么被折叠?



