summaryrefslogtreecommitdiff
path: root/packages/base/src/Data/Packed/Internal/Matrix.hs
diff options
context:
space:
mode:
authorAlberto Ruiz <aruiz@um.es>2015-05-24 12:45:23 +0200
committerAlberto Ruiz <aruiz@um.es>2015-05-24 12:45:23 +0200
commit8ede2ed162f3d00172ee3fa4835e3ee2184bcd99 (patch)
treecdb3025dc5e469603d32d4e200cc753d3502c6d8 /packages/base/src/Data/Packed/Internal/Matrix.hs
parentb1b445697db31b1603a31747ca31151f97ee7263 (diff)
joint extractor of rows and columns
Diffstat (limited to 'packages/base/src/Data/Packed/Internal/Matrix.hs')
-rw-r--r--packages/base/src/Data/Packed/Internal/Matrix.hs44
1 files changed, 22 insertions, 22 deletions
diff --git a/packages/base/src/Data/Packed/Internal/Matrix.hs b/packages/base/src/Data/Packed/Internal/Matrix.hs
index 1aee7d3..76d2204 100644
--- a/packages/base/src/Data/Packed/Internal/Matrix.hs
+++ b/packages/base/src/Data/Packed/Internal/Matrix.hs
@@ -265,32 +265,32 @@ class (Storable a) => Element a where
265 transdata = transdataP -- transdata' 265 transdata = transdataP -- transdata'
266 constantD :: a -> Int -> Vector a 266 constantD :: a -> Int -> Vector a
267 constantD = constantP -- constant' 267 constantD = constantP -- constant'
268 extractR :: Matrix a -> CInt -> Idxs -> Matrix a 268 extractR :: Matrix a -> CInt -> Idxs -> CInt -> Idxs -> Matrix a
269 269
270instance Element Float where 270instance Element Float where
271 transdata = transdataAux ctransF 271 transdata = transdataAux ctransF
272 constantD = constantAux cconstantF 272 constantD = constantAux cconstantF
273 extractR = extractAux c_extractRF 273 extractR = extractAux c_extractF
274 274
275instance Element Double where 275instance Element Double where
276 transdata = transdataAux ctransR 276 transdata = transdataAux ctransR
277 constantD = constantAux cconstantR 277 constantD = constantAux cconstantR
278 extractR = extractAux c_extractRD 278 extractR = extractAux c_extractD
279 279
280instance Element (Complex Float) where 280instance Element (Complex Float) where
281 transdata = transdataAux ctransQ 281 transdata = transdataAux ctransQ
282 constantD = constantAux cconstantQ 282 constantD = constantAux cconstantQ
283 extractR = extractAux c_extractRQ 283 extractR = extractAux c_extractQ
284 284
285instance Element (Complex Double) where 285instance Element (Complex Double) where
286 transdata = transdataAux ctransC 286 transdata = transdataAux ctransC
287 constantD = constantAux cconstantC 287 constantD = constantAux cconstantC
288 extractR = extractAux c_extractRC 288 extractR = extractAux c_extractC
289 289
290instance Element (CInt) where 290instance Element (CInt) where
291 transdata = transdataAux ctransI 291 transdata = transdataAux ctransI
292 constantD = constantAux cconstantI 292 constantD = constantAux cconstantI
293 extractR = extractAux c_extractRI 293 extractR = extractAux c_extractI
294 294
295 295
296------------------------------------------------------------------- 296-------------------------------------------------------------------
@@ -443,26 +443,26 @@ isT Matrix{order = RowMajor} = 0
443tt x@Matrix{order = ColumnMajor} = trans x 443tt x@Matrix{order = ColumnMajor} = trans x
444tt x@Matrix{order = RowMajor} = x 444tt x@Matrix{order = RowMajor} = x
445 445
446--extractAux :: Matrix Double -> Idxs -> Matrix Double 446
447extractAux f m mode v = unsafePerformIO $ do 447extractAux f m moder vr modec vc = unsafePerformIO $ do
448 let nr | mode == 0 = fromIntegral $ max 0 (v@>1 - v@>0 + 1) 448 let nr = if moder == 0 then fromIntegral $ vr@>1 - vr@>0 + 1 else dim vr
449 | otherwise = dim v 449 nc = if modec == 0 then fromIntegral $ vc@>1 - vc@>0 + 1 else dim vc
450 r <- createMatrix RowMajor nr (cols m) 450 r <- createMatrix RowMajor nr nc
451 app3 (f mode (isT m)) vec v mat (tt m) mat r "extractAux" 451 app4 (f moder modec (isT m)) vec vr vec vc mat (tt m) mat r "extractAux"
452 return r 452 return r
453 453
454foreign import ccall unsafe "extractRD" c_extractRD 454foreign import ccall unsafe "extractD" c_extractD
455 :: CInt -> CInt -> CIdxs (CM Double (CM Double (IO CInt))) 455 :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM Double (CM Double (IO CInt))))
456 456
457foreign import ccall unsafe "extractRF" c_extractRF 457foreign import ccall unsafe "extractF" c_extractF
458 :: CInt -> CInt -> CIdxs (CM Float (CM Float (IO CInt))) 458 :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM Float (CM Float (IO CInt))))
459 459
460foreign import ccall unsafe "extractRC" c_extractRC 460foreign import ccall unsafe "extractC" c_extractC
461 :: CInt -> CInt -> CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt))) 461 :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt))))
462 462
463foreign import ccall unsafe "extractRQ" c_extractRQ 463foreign import ccall unsafe "extractQ" c_extractQ
464 :: CInt -> CInt -> CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt))) 464 :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt))))
465 465
466foreign import ccall unsafe "extractRI" c_extractRI 466foreign import ccall unsafe "extractI" c_extractI
467 :: CInt -> CInt -> CIdxs (CM CInt (CM CInt (IO CInt))) 467 :: CInt -> CInt -> CInt -> CIdxs (CIdxs (CM CInt (CM CInt (IO CInt))))
468 468