Как создать 2-мерный распакованный массив из списка 1-мерных?

Репа имеет fromListUnboxed это позволяет создать одномерный массив из списка значений. Но как я могу создать 2-мерный список заданных 1-мерных без коробок (одинаковой длины)?

1 ответ

Использовать reshape функция: reshape :: (Shape sh1, Shape sh2, Source r1 e) => sh2 -> Array r1 sh1 e -> Array D sh2 e, Это только время компиляции (без накладных расходов времени выполнения).

Я тоже наткнулся на эту проблему. Я решил эту проблему путем преобразования списка массивов в распакованные векторы, их конкатенации и преобразования в массив repa. Очень неуклюжий, но это все, о чем я мог думать.

import           Data.Array.Repa     as R
import           Data.Vector.Unboxed as V
import           Prelude             as P

arrs = P.replicate 5 $ fromListUnboxed (ix1 10) [0..9 :: Int]

main = print concatenatedArrs
  where vectors = P.map toUnboxed arrs
        concatenatedVectors = V.concat vectors
        concatenatedArrs = fromUnboxed (R.ix2 5 10) concatenatedVectors
Другие вопросы по тегам