| Safe Haskell | Safe-Inferred |
|---|---|
| Language | GHC2021 |
MCSP.Algorithms.Vector
Description
Operations on vector of Default.
Synopsis
- type Default = Float
- zeros :: (Unbox a, Num a) => Int -> Vector a
- replicate :: Unbox a => Int -> a -> Vector a
- map :: (Unbox a, Unbox b) => (a -> b) -> Vector a -> Vector b
- choose :: Unbox a => a -> a -> Vector Bool -> Vector a
- (.+) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a
- (.-) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a
- (.*) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a
- (.*.) :: (Unbox a, Num a) => a -> Vector a -> Vector a
- sum :: (Unbox a, Num a) => NonEmpty (Vector a) -> Vector a
- sort :: (Unbox a, Ord a) => Vector a -> Vector a
- sortOn :: (Unbox a, Ord b) => (a -> b) -> Vector a -> Vector a
- sortBy :: Unbox a => (a -> a -> Ordering) -> Vector a -> Vector a
- argSort :: (Unbox a, Ord a) => Vector a -> Vector Int
- sortLike :: (Unbox a, Unbox b, Ord b) => Vector a -> Vector b -> Vector a
- normalized :: (Unbox a, Fractional a, Ord a) => Vector a -> Vector a
- standardized :: (Unbox a, Floating a, Eq a) => Vector a -> Vector a
- sumM :: (Unbox a, Num a, Monad m) => NonEmpty (m (Vector a)) -> m (Vector a)
- replicateM :: (Monad m, Unbox a) => Int -> m a -> m (Vector a)
- uniformN :: (Unbox a, Variate a, Num a) => Int -> Random (Vector a)
- uniformSN :: (Unbox a, Variate a, Num a) => Int -> Random (Vector a)
- uniformRN :: (Unbox a, Variate a) => a -> a -> Int -> Random (Vector a)
- weighted :: (Unbox a, Variate a, Num a) => a -> Vector a -> Random (Vector a)
- weightedN :: (Unbox a, Variate a, Num a) => a -> Vector a -> Random (Vector a)
- choice :: NonEmpty (Double, Random a) -> Random a
Documentation
Initialization
zeros :: (Unbox a, Num a) => Int -> Vector a Source #
Create a vector of zeros given the length.
>>>zeros 3[0.0,0.0,0.0]
>>>zeros 0[]
Element-wise Operations
choose :: Unbox a => a -> a -> Vector Bool -> Vector a Source #
Case analysis for the Bool type.
evaluates to choose x y px in every position that is False in p, and evaluates to y
everywehere else. Works as a vector version of bool.
The name is taken from numpy.choose.
>>>choose 10 (-5) [True, False, False, True][-5.0,10.0,10.0,-5.0]
(.+) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a infixl 6 Source #
Element-wise addition.
>>>[1, 2, 3] .+ [5, 6, 7][6.0,8.0,10.0]
(.-) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a infixl 6 Source #
Element-wise subtraction.
>>>[1, 2, 3] .- [5, 6, 7][-4.0,-4.0,-4.0]
(.*) :: (Unbox a, Num a) => Vector a -> Vector a -> Vector a infixl 7 Source #
Element-wise multiplication.
>>>[1, 2, 3] .* [5, 6, 7][5.0,12.0,21.0]
(.*.) :: (Unbox a, Num a) => a -> Vector a -> Vector a infixl 7 Source #
Multiplication by a scalar.
>>>3 .*. [5, 6, 7][15.0,18.0,21.0]
sum :: (Unbox a, Num a) => NonEmpty (Vector a) -> Vector a Source #
Element-wise sum of all vectors.
>>>sum [[1, 2], [3, 4], [5, 6]][9.0,12.0]
Sorting
sort :: (Unbox a, Ord a) => Vector a -> Vector a Source #
Sorts an array using the default comparison.
>>>sort [3, 1, 2][1.0,2.0,3.0]
sortOn :: (Unbox a, Ord b) => (a -> b) -> Vector a -> Vector a Source #
Sorts a vector by comparing the results of a key function applied to each element.
>>>sortOn (\x -> x * x) [-3, -1, 2][-1.0,2.0,-3.0]
sortBy :: Unbox a => (a -> a -> Ordering) -> Vector a -> Vector a Source #
Sorts a vector using a custom comparison.
>>>import Data.Ord (Ordering (..))>>>sortBy (\x y -> if x * x < y * y then LT else GT) [-3, -1, 2][-1.0,2.0,-3.0]
argSort :: (Unbox a, Ord a) => Vector a -> Vector Int Source #
Returns the indices that would sort the vector.
>>>argSort [30, 10, 20][1,2,0]
>>>argSort $ argSort [30, 10, 20][2,0,1]
sortLike :: (Unbox a, Unbox b, Ord b) => Vector a -> Vector b -> Vector a Source #
Sort a vector based on the values of another array.
>>>sortLike [30, 10, 20] [0.2, 0.9, 0.1][20.0,30.0,10.0]
Statistics
normalized :: (Unbox a, Fractional a, Ord a) => Vector a -> Vector a Source #
Normalize a vector by its maximum absolute value.
>>>normalized [1, 2, 5, 10][0.1,0.2,0.5,1.0]
>>>normalized [1, 2, 5, -10][0.1,0.2,0.5,-1.0]
>>>normalized [][]
>>>normalized [0][0.0]
standardized :: (Unbox a, Floating a, Eq a) => Vector a -> Vector a Source #
Adapt values for such that the mean becomes zero and standard deviation, one.
>>>standardized [1, 2, 5, 10][-1.0,-0.7142857142857143,0.14285714285714285,1.5714285714285714]
>>>standardized [][]
>>>standardized [1, 1][0.0,0.0]
Monadic Operations
sumM :: (Unbox a, Num a, Monad m) => NonEmpty (m (Vector a)) -> m (Vector a) Source #
Lifted version of sum.
>>>import MCSP.System.Random (generateWith)>>>generateWith (2,3) $ sumM [uniformN 4, uniformSN 4][0.17218197108856648,0.21998774703644852,-0.16158831286684616,1.0345635554897776]
replicateM :: (Monad m, Unbox a) => Int -> m a -> m (Vector a) #
Random Operations
uniformN :: (Unbox a, Variate a, Num a) => Int -> Random (Vector a) Source #
Generate multiple uniformly distributed values between [0,1].
Replicated version of uniform.
>>>import MCSP.System.Random (generateWith)>>>generateWith (2,3) $ uniformN 3[1.9765692737382712e-2,0.3673953156572515,0.5752284362246546]
uniformSN :: (Unbox a, Variate a, Num a) => Int -> Random (Vector a) Source #
Generate multiple uniformly distributed values between [-1,1].
Signed version of uniformN.
>>>import MCSP.System.Random (generateWith)>>>generateWith (2,3) $ uniformSN 3[-0.9604686145252346,-0.26520936868549705,0.15045687244930916]
uniformRN :: (Unbox a, Variate a) => a -> a -> Int -> Random (Vector a) Source #
Generate multiple uniformly distributed values in the given range.
Replicated version of uniformR.
>>>import MCSP.System.Random (generateWith)>>>generateWith (2,3) $ uniformRN 5 50 3[5.889456173182222,21.532789204576318,30.885279630109455]
choice :: NonEmpty (Double, Random a) -> Random a Source #
Choose randomly between multiple Random monad, with probablity proportional to its given
weight.
>>>import MCSP.System.Random (generateWith)>>>generateWith (1,2) $ replicateM 10 $ choice [(1, pure 'a'), (2, pure 'b')]"abbbaabbbb"
>>>generateWith (1,2) $ replicateM 10 $ choice [(1, uniformR (-1) 0), (2, uniformR 0 1)][-0.11816487538074749,0.5798377716767166,0.12231072251084052,0.754750234725723,0.5163453222019222,0.9673060222002038,-0.28900858364465354,0.609061325679456,-0.15187385001852494,0.4987697781636008]