我正在使用Numeric.LinearAlgebra
库。这是我的代码:
customConv :: Matrix Z
customConv = conv2 ((3><3)[1..]) ((1><1)[1.1])
我的问题是我希望输出来自Matrix Z
类型。
现在类型不是Z
,因为转化为1.1
是否有任何函数可以对矩阵的所有值进行舍入并使其从此类型中生成?
答案 0 :(得分:2)
这取决于您想要如何舍入值。
如果要舍入到最接近的整数,则可以使用cmap round
:
λ> cmap round $ conv2 ((3><3)[1..]) ((1><1)[1.1 :: R]) :: Matrix Z
(3><3)
[ 1, 2, 3
, 4, 6, 7
, 8, 9, 10 ]
cmap
具有以下签名:
cmap :: (Element b, Container c e) => (e -> b) -> c e -> c b
这意味着fmap
仅限于hmatrix容器可以持有的类型。
相反,如果要裁剪小数,可以使用toZ
:
λ> toZ $ conv2 ((3><3)[1..]) ((1><1)[1.1 :: R]) :: Matrix Z
(3><3)
[ 1, 2, 3
, 4, 5, 6
, 7, 8, 9 ]
toZ
具有以下签名:
toZ :: Container c e => c e -> c Z
这意味着它会将任何内容转换为Z
的容器。它通过裁剪小数来实现。