2016-10-04 61 views
0

我正在使用Numeric.LinearAlgebra库。这是我的代码:Haskell - 矩阵类型之间的转换

customConv :: Matrix Z 
customConv = conv2 ((3><3)[1..]) ((1><1)[1.1]) 

我的问题是,我想的是,输出将是Matrix Z类型。

现在的类型不是Z因为CONV是1.1

是否有任何功能,圆矩阵的所有值,然后用此做呢?

回答

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。它通过裁剪小数来完成。