2

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

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

这意味着什么?

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

4

1 回答 1

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'

于 2021-06-14T10:22:41.260 回答