Матрица репликации Haskell Accelerate

Как я могу воспроизвести матрицу в Haskell Accelerate? Например, у меня есть матрица mat :: Matrix (Z :. 2 :. 5) .... Я хочу получить трехмерный массив с формой. Я пытался использовать A.replicate (A.lift (Z :. 9 :. All)) mat, но я получаю сообщение об ошибке

Не удалось сопоставить тип "Z" с "DIM0:". Int 'Ожидаемый тип: Acc (Array (SliceShape ((Z:. Int):. All)) a) Фактический тип: Acc (Matrix 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'.

Другие вопросы по тегам