Матрица репликации 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'
.