2016-10-04 5 views
0

私はNumeric.LinearAlgebraライブラリを使用しています。これは私のコードです:Haskell - マトリックスタイプ間の変換

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

私の問題は、私は、出力のタイプMatrix Zからなることをしたいということです。

は今CONVは1.1

であるので、タイプがZでない行列のすべての値を四捨五入して、このタイプからそれを作るためにどんな機能がありますか?

答えて

2

値を丸める方法によって異なります。あなたは最も近い整数に丸めるしたい場合は 、あなたはcmap round使用することができます。

cmap :: (Element b, Container c e) => (e -> b) -> c e -> c b 

それだけで保持することが可能なタイプに拘束fmapようなものだ意味:

λ> 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次のシグネチャがありますhmatrix容器によって。代わりに、あなたは小数をトリミングしたい場合

、あなたはtoZ使用することができます。

toZ :: Container c e => c e -> c Z 

それはのコンテナには、何も変換されます意味:

λ> toZ $ conv2 ((3><3)[1..]) ((1><1)[1.1 :: R]) :: Matrix Z 
(3><3) 
[ 1, 2, 3 
, 4, 5, 6 
, 7, 8, 9 ] 

toZ次のシグネチャがありますZ。これは小数点を切り取ることで行います。