2016-10-04 94 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。它通過裁剪小數來完成。