Haskell 加速复制矩阵

Haskell Accelerate replicate matrix

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

Couldn't match type ‘Z’ with ‘DIM0 :. Int’ Expected type: Acc (Array (SliceShape ((Z :. Int) :. All)) a) Actual type: Acc (Matrix a)

这是什么意思?

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

问题是切片需要与输入数组具有相同的等级(维数)。 All 并不代表 'all the rest of the dimensions',它只代表 'all the elements in this dimension'。因此,您可以通过以下方式解决您的问题:

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

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

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

不知道有没有办法说'all the rest of the dimensions'.

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

可能会更容易阅读