Haskell 加速复制矩阵

Posted

技术标签:

【中文标题】Haskell 加速复制矩阵【英文标题】:Haskell Accelerate replicate matrix 【发布时间】:2021-06-14 03:04:29 【问题描述】:

如何在 Haskell Accelerate 中复制矩阵? 例如,我有一个矩阵mat :: Matrix (Z :. 2 :. 5) ...。我想得到一个形状为Z :. 9 :. 2 :. 5 的三维数组。 我尝试使用A.replicate (A.lift (Z :. 9 :. All)) mat,但出现错误

无法将类型“Z”与“DIM0 :.”匹配。诠释' 预期类型:Acc (Array (SliceShape ((Z :. Int) :. All)) a) 实际类型:Acc(矩阵a)

这是什么意思?

同样,如果我有一个形状为Z :. 9 :. 5 的矩阵,我怎样才能得到一个形状为Z :. 9 :. 2 :. 5 的三维数组?

【问题讨论】:

【参考方案1】:

问题是切片需要与输入数组具有相同的秩(维数)。 All 并不表示“所有其余维度”,而仅表示“此维度中的所有元素”。因此,您可以通过以下方式解决您的问题:

A.replicate (A.lift (Z :. 9 :. All :. All)) mat

这也提供了一些关于如何回答第二个问题的直觉:

A.replicate (A.lift (Z :. All :. 2 :. All)) mat

我不知道是否有办法说“所有其他维度”。

错误信息Couldn't match type 'Z' with 'DIM0 :. Int' 表示你的形状排名不正确。您需要添加另一个维度。如果它说:Couldn't match type 'Z' with 'Z :. Int',也许会更容易阅读。

【讨论】:

以上是关于Haskell 加速复制矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Haskell 中解析整数矩阵?

编写一次并行数组 Haskell 表达式,在 CPU 和 GPU 上运行 repa 并加速

在haskell中回溯

尽管 Haskell 很懒,如何输出进度信息? [复制]

为啥 Haskell 中有“数据”和“新类型”? [复制]

不可复制的Miriam Haskell