1

我正在使用 hMatrix,我的代码的第一行是:

import Numeric.LinearAlgebra
import qualified Data.Vector as V

问题是,在我的代码中,向量类型是V.Vector,但是 hMatrix 定义的一些方法有类型Vector -> ...,当我尝试使用这些方法时 GHC 不理解,说它们不是为类型定义的V.Vector。我怎么解决这个问题?

更新:

从 hMatrix 的文档中:

Vector类型是Storable来自 Roman Leshchinskiy 的向量包的向量,因此该库提供的所有数组处理工具都可以直接使用。

但是, hMatrix 中不包含一些基本运算符,例如(++)(存在于 中)。Data.Vector.Storable是不可能从 hMatrix 中使用这些,还是有一些简单的方法可以告诉编译器这些类型是相同的?

4

3 回答 3

3

hmatrix 使用自己的Data.Packed.Vector类型,它不同于Data.Vector.

Data.Packed.Vector在您的代码中使用,或者在调用函数之前转换Data.Vector为都可以。Data.Packed.Vector

于 2014-06-25T12:06:36.450 回答
1

您可以为该Vector类型添加显式导入:

import Numeric.LinearAlgebra
import qualified Data.Vector as V
import Data.Vector (Vector)

不过,我不知道外部模块可能会根据您导入它们所依赖的模块的方式而中断。

于 2014-06-25T12:04:45.423 回答
1

请注意,您不能仅仅因为导入另一个模块就破坏 hmatrix。您只是类型不匹配,因为vector提供了不同类型的向量,包括.Generic适用于所有这些的接口。

你可能有一些类似的东西

import Data.Vector
f :: Vector Int -> Vector Int
f = whatever

如果您导入Data.Vector.Generic,您可以编写适用于所有矢量类型的函数,包括 hmatrix 使用的那些。

import Data.Vector.Generic
f :: Vector Int -> Vector Int
f xs = xs ++ empty

应该使用 hmatrix 向量。

于 2014-06-26T16:50:32.643 回答