diff options
author | Alberto Ruiz <aruiz@um.es> | 2015-05-24 12:45:23 +0200 |
---|---|---|
committer | Alberto Ruiz <aruiz@um.es> | 2015-05-24 12:45:23 +0200 |
commit | 8ede2ed162f3d00172ee3fa4835e3ee2184bcd99 (patch) | |
tree | cdb3025dc5e469603d32d4e200cc753d3502c6d8 /packages/base/src/Data/Packed/Internal/Matrix.hs | |
parent | b1b445697db31b1603a31747ca31151f97ee7263 (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.hs | 44 |
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 | ||
270 | instance Element Float where | 270 | instance 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 | ||
275 | instance Element Double where | 275 | instance 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 | ||
280 | instance Element (Complex Float) where | 280 | instance 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 | ||
285 | instance Element (Complex Double) where | 285 | instance 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 | ||
290 | instance Element (CInt) where | 290 | instance 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 | |||
443 | tt x@Matrix{order = ColumnMajor} = trans x | 443 | tt x@Matrix{order = ColumnMajor} = trans x |
444 | tt x@Matrix{order = RowMajor} = x | 444 | tt x@Matrix{order = RowMajor} = x |
445 | 445 | ||
446 | --extractAux :: Matrix Double -> Idxs -> Matrix Double | 446 | |
447 | extractAux f m mode v = unsafePerformIO $ do | 447 | extractAux 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 | ||
454 | foreign import ccall unsafe "extractRD" c_extractRD | 454 | foreign 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 | ||
457 | foreign import ccall unsafe "extractRF" c_extractRF | 457 | foreign 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 | ||
460 | foreign import ccall unsafe "extractRC" c_extractRC | 460 | foreign 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 | ||
463 | foreign import ccall unsafe "extractRQ" c_extractRQ | 463 | foreign 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 | ||
466 | foreign import ccall unsafe "extractRI" c_extractRI | 466 | foreign 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 | ||