Как создать 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