Haskell Repa slice 函数有类似Vector等语言的用法吗?
Is there usage of Haskell Repa slice function analogous to Vector and other languages?
我正在尝试在 Haskell 中获得多维数组的可用版本,与 Python 和其他语言中的 numpy
数组相当。
我发现了其他关于如何为特定维度的数组编写自定义函数的问题,但我的 objective 更重要的是,获得了与 Data.Vector
的 slice
函数类似的行为,即直观并完成其他语言的括号索引数组的工作。
Vector
的 slice
函数有类型
V.slice :: Int -> Int -> V.Vector a -> V.Vector a
所以切片向量 v
就像
一样简单
import Data.Vector as V
let v = V.fromList [1..10]
i = 1
j = 5
V.slice i j v
另一方面,Repa
的 slice
具有类型
R.slice :: (R.Slice sl, R.Shape (R.FullShape sl), R.Source r e) => R.Array r (R.FullShape sl) e -> sl -> R.Array R.D (R.SliceShape sl) e
所以它需要一个 Repa 数组和一个形状,return 一个延迟数组。
我知道 Repa 不会将整数作为索引,但我正在寻找 slice
函数在任意维度上的一般用途,无论是使用 Repa
的 (Z :. i)
还是 ixn
尺寸规格。
我不是在寻找使用 traverse
的维度相关函数,并且不希望进入任何模板 haskell 来概括它,尽管如果无法使用 slice
功能一般就是这样。
那么问题是:是否可以使用 Repa
的 slice
函数来获取多维数组的任意切片,例如 numpy
的 v[x1:x2 ,y1:y2] 或 C++ Eigen
的 matrix.block<p,q>(i,j)
?
我认为最接近的等价物是 extract,它有一个起始索引(如 ix2 x1 y1
)和一个大小(如 ix2 (x2-x1) (y2-y1)
)。
extract
的结果始终具有与输入相同的维数,但每个维的大小可以不同。 slice
的结果可以有不同数量的维度,但在任何给定的维度中,它要么接受所有元素,要么只接受一个元素。 (基于 Shape
和 Slice
的实例。)
我正在尝试在 Haskell 中获得多维数组的可用版本,与 Python 和其他语言中的 numpy
数组相当。
我发现了其他关于如何为特定维度的数组编写自定义函数的问题,但我的 objective 更重要的是,获得了与 Data.Vector
的 slice
函数类似的行为,即直观并完成其他语言的括号索引数组的工作。
Vector
的 slice
函数有类型
V.slice :: Int -> Int -> V.Vector a -> V.Vector a
所以切片向量 v
就像
import Data.Vector as V
let v = V.fromList [1..10]
i = 1
j = 5
V.slice i j v
另一方面,Repa
的 slice
具有类型
R.slice :: (R.Slice sl, R.Shape (R.FullShape sl), R.Source r e) => R.Array r (R.FullShape sl) e -> sl -> R.Array R.D (R.SliceShape sl) e
所以它需要一个 Repa 数组和一个形状,return 一个延迟数组。
我知道 Repa 不会将整数作为索引,但我正在寻找 slice
函数在任意维度上的一般用途,无论是使用 Repa
的 (Z :. i)
还是 ixn
尺寸规格。
我不是在寻找使用 traverse
的维度相关函数,并且不希望进入任何模板 haskell 来概括它,尽管如果无法使用 slice
功能一般就是这样。
那么问题是:是否可以使用 Repa
的 slice
函数来获取多维数组的任意切片,例如 numpy
的 v[x1:x2 ,y1:y2] 或 C++ Eigen
的 matrix.block<p,q>(i,j)
?
我认为最接近的等价物是 extract,它有一个起始索引(如 ix2 x1 y1
)和一个大小(如 ix2 (x2-x1) (y2-y1)
)。
extract
的结果始终具有与输入相同的维数,但每个维的大小可以不同。 slice
的结果可以有不同数量的维度,但在任何给定的维度中,它要么接受所有元素,要么只接受一个元素。 (基于 Shape
和 Slice
的实例。)