summaryrefslogtreecommitdiff
path: root/packages/base/src/Data/Packed/Internal/Matrix.hs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/base/src/Data/Packed/Internal/Matrix.hs')
-rw-r--r--packages/base/src/Data/Packed/Internal/Matrix.hs20
1 files changed, 11 insertions, 9 deletions
diff --git a/packages/base/src/Data/Packed/Internal/Matrix.hs b/packages/base/src/Data/Packed/Internal/Matrix.hs
index be5fb03..1aee7d3 100644
--- a/packages/base/src/Data/Packed/Internal/Matrix.hs
+++ b/packages/base/src/Data/Packed/Internal/Matrix.hs
@@ -265,7 +265,7 @@ 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 -> Idxs -> Matrix a 268 extractR :: Matrix a -> CInt -> Idxs -> Matrix a
269 269
270instance Element Float where 270instance Element Float where
271 transdata = transdataAux ctransF 271 transdata = transdataAux ctransF
@@ -444,23 +444,25 @@ tt 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--extractAux :: Matrix Double -> Idxs -> Matrix Double
447extractAux f m v = unsafePerformIO $ do 447extractAux f m mode v = unsafePerformIO $ do
448 r <- createMatrix RowMajor (dim v) (cols m) 448 let nr | mode == 0 = fromIntegral $ max 0 (v@>1 - v@>0 + 1)
449 app3 (f (isT m)) vec v mat (tt m) mat r "extractAux" 449 | otherwise = dim v
450 r <- createMatrix RowMajor nr (cols m)
451 app3 (f mode (isT m)) vec v mat (tt m) mat r "extractAux"
450 return r 452 return r
451 453
452foreign import ccall unsafe "extractRD" c_extractRD 454foreign import ccall unsafe "extractRD" c_extractRD
453 :: CInt -> CIdxs (CM Double (CM Double (IO CInt))) 455 :: CInt -> CInt -> CIdxs (CM Double (CM Double (IO CInt)))
454 456
455foreign import ccall unsafe "extractRF" c_extractRF 457foreign import ccall unsafe "extractRF" c_extractRF
456 :: CInt -> CIdxs (CM Float (CM Float (IO CInt))) 458 :: CInt -> CInt -> CIdxs (CM Float (CM Float (IO CInt)))
457 459
458foreign import ccall unsafe "extractRC" c_extractRC 460foreign import ccall unsafe "extractRC" c_extractRC
459 :: CInt -> CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt))) 461 :: CInt -> CInt -> CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt)))
460 462
461foreign import ccall unsafe "extractRQ" c_extractRQ 463foreign import ccall unsafe "extractRQ" c_extractRQ
462 :: CInt -> CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt))) 464 :: CInt -> CInt -> CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt)))
463 465
464foreign import ccall unsafe "extractRI" c_extractRI 466foreign import ccall unsafe "extractRI" c_extractRI
465 :: CInt -> CIdxs (CM CInt (CM CInt (IO CInt))) 467 :: CInt -> CInt -> CIdxs (CM CInt (CM CInt (IO CInt)))
466 468