gpt4 book ai didi

haskell - 扩展 Repa 阵列形状

转载 作者:行者123 更新时间:2023-12-03 14:11:02 26 4
gpt4 key购买 nike

我正在编写一个生成图像的程序,我想将其带入 Repa 数组。我目前使用的类型:

data Colour = Colour Double Double Double

来表示像素,我有一个(可能效率低下但功能强大的)函数来转换 ColourDIM1大批:
colourToRepa :: Colour -> Array U DIM1 Double
colourToRepa (Colour r g b) = R.fromListUnboxed (Z :. (3::Int)) [r,g,b]

目前我程序中的图像只是 [Colour]带有 (Int, Int) 的值表示维度。

我可以用它来构建一个 Array V DIM2 Colour很容易,但是有没有办法(使用 colourToRepa 或其他方式)将此数组扩展为 Array U DIM3 Double ?

有了列表,我就可以使用 map但 Repa 的 map 保留了数组的形状(我想从 DIM2DIM3 )。

最佳答案

请记住,形状与 repa 中的数据分开存储,因此您将是 reshaping数组从 DIM1 到 DIM3,不改变 extent的阵列。

我们有一个 DIM1(平面)阵列:

> let x :: Array DIM1 Double ; x = fromList (Z :. (9::Int)) [1..9]
> x
Array (Z :. 9) [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

它的范围是:
> extent x
Z :. 9

使用 reshape 我们可以将数组的形状从 1D 转换为 3D:
> let y :: Array DIM3 Double ;
y = reshape (Z :. (3::Int) :. (3::Int) :. (1::Int)) x
> y
Array (Z :. 3 :. 3 :. 1) [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

它的类型发生了变化:
> :t y
y :: Array DIM3 Double

关于haskell - 扩展 Repa 阵列形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com