From 8325e1a676a1a8e253e6915d62630145051aee11 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Tue, 10 Jun 2014 16:50:19 +0200 Subject: sortVector --- packages/base/src/C/vector-aux.c | 13 +++++++++++++ packages/base/src/Data/Packed/Internal/Numeric.hs | 2 ++ packages/base/src/Data/Packed/Numeric.hs | 2 ++ packages/base/src/Numeric/LinearAlgebra/Data.hs | 1 + packages/base/src/Numeric/Vectorized.hs | 12 +++++++++++- 5 files changed, 29 insertions(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/base/src/C/vector-aux.c b/packages/base/src/C/vector-aux.c index 53b56aa..b176089 100644 --- a/packages/base/src/C/vector-aux.c +++ b/packages/base/src/C/vector-aux.c @@ -770,3 +770,16 @@ int smTXv(KDVEC(vals),KIVEC(cols),KIVEC(rows),KDVEC(x),DVEC(r)) { OK } +//////////////////////////////////////////////////////////////////////////////// + +int +compare_doubles (const void *a, const void *b) { + return *(double*)a > *(double*)b; +} + +int sort_values(KDVEC(v),DVEC(r)) { + memcpy(rp,vp,vn*sizeof(double)); + qsort(rp,rn,sizeof(double),compare_doubles); + OK +} + diff --git a/packages/base/src/Data/Packed/Internal/Numeric.hs b/packages/base/src/Data/Packed/Internal/Numeric.hs index 0205a17..56ecdfe 100644 --- a/packages/base/src/Data/Packed/Internal/Numeric.hs +++ b/packages/base/src/Data/Packed/Internal/Numeric.hs @@ -30,6 +30,8 @@ module Data.Packed.Internal.Numeric ( Product(..), udot, mXm,mXv,vXm, outer, kronecker, + -- * sorting + sortVector, -- * Element conversion Convert(..), Complexable(), diff --git a/packages/base/src/Data/Packed/Numeric.hs b/packages/base/src/Data/Packed/Numeric.hs index e59c1cd..cc26d7a 100644 --- a/packages/base/src/Data/Packed/Numeric.hs +++ b/packages/base/src/Data/Packed/Numeric.hs @@ -51,6 +51,8 @@ module Data.Packed.Numeric ( gaussianSample, uniformSample, meanCov, + -- * sorting + sortVector, -- * Element conversion Convert(..), Complexable(), diff --git a/packages/base/src/Numeric/LinearAlgebra/Data.hs b/packages/base/src/Numeric/LinearAlgebra/Data.hs index 4e4868a..5099445 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Data.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Data.hs @@ -47,6 +47,7 @@ module Numeric.LinearAlgebra.Data( -- * Find elements find, maxIndex, minIndex, maxElement, minElement, atIndex, + sortVector, -- * Sparse AssocMatrix, toDense, diff --git a/packages/base/src/Numeric/Vectorized.hs b/packages/base/src/Numeric/Vectorized.hs index 5aebb14..82504a9 100644 --- a/packages/base/src/Numeric/Vectorized.hs +++ b/packages/base/src/Numeric/Vectorized.hs @@ -18,7 +18,8 @@ module Numeric.Vectorized ( FunCodeSV(..), vectorMapValR, vectorMapValC, vectorMapValF, vectorMapValQ, FunCodeVV(..), vectorZipR, vectorZipC, vectorZipF, vectorZipQ, vectorScan, saveMatrix, - Seed, RandDist(..), randomVector + Seed, RandDist(..), randomVector, + sortVector ) where import Data.Packed.Internal.Common @@ -344,3 +345,12 @@ randomVector seed dist n = unsafePerformIO $ do foreign import ccall unsafe "random_vector" c_random_vector :: CInt -> CInt -> TV +-------------------------------------------------------------------------------- + +sortVector v = unsafePerformIO $ do + r <- createVector (dim v) + app2 c_sort_values vec v vec r "sortVector" + return r + +foreign import ccall unsafe "sort_values" c_sort_values :: TVV + -- cgit v1.2.3