24
24
--------------------------------------------------------------------------------
25
25
module ArrayFire.Algorithm where
26
26
27
- import ArrayFire.Array
28
27
import ArrayFire.FFI
29
28
import ArrayFire.Internal.Algorithm
30
29
import ArrayFire.Internal.Types
31
30
32
- import Foreign.C.Types
33
- import Data.Word
34
-
35
31
-- | Sum all of the elements in 'Array' along the specified dimension
36
32
--
37
33
-- >>> A.sum (A.vector @Double 10 [1..]) 0
38
34
-- 55.0
39
35
--
40
- -- >>> A.sum (A. matrix @Double (10,10) [[2 ..],[2..]]) 0
36
+ -- >>> A.matrix @Double (10,10) $ replicate 10 [1 ..]
41
37
-- 65.0
42
38
sum
43
39
:: AFType a
44
40
=> Array a
45
41
-- ^ Array to sum
46
42
-> Int
47
- -- ^ Dimension along which to perform sum
48
- -> a
43
+ -- ^ 0-based Dimension along which to perform sum
44
+ -> Array a
49
45
-- ^ Will return the sum of all values in the input array along the specified dimension
50
- sum x (fromIntegral -> n) = getScalar (x `op1` (\ p a -> af_sum p a n))
46
+ sum x (fromIntegral -> n) = (x `op1` (\ p a -> af_sum p a n))
51
47
52
48
-- | Sum all of the elements in 'Array' along the specified dimension, using a default value for NaN
53
49
--
61
57
-- ^ Dimension along which to perform sum
62
58
-> Double
63
59
-- ^ Default value to use in the case of NaN
64
- -> a
60
+ -> Array a
65
61
-- ^ Will return the sum of all values in the input array along the specified dimension, substituted with the default value
66
- sumNaN n (fromIntegral -> i) d = getScalar (n `op1` (\ p a -> af_sum_nan p a i d))
62
+ sumNaN n (fromIntegral -> i) d = (n `op1` (\ p a -> af_sum_nan p a i d))
67
63
68
64
-- | Product all of the elements in 'Array' along the specified dimension
69
65
--
@@ -75,9 +71,9 @@ product
75
71
-- ^ Array to product
76
72
-> Int
77
73
-- ^ Dimension along which to perform product
78
- -> a
74
+ -> Array a
79
75
-- ^ Will return the product of all values in the input array along the specified dimension
80
- product x (fromIntegral -> n) = getScalar (x `op1` (\ p a -> af_product p a n))
76
+ product x (fromIntegral -> n) = (x `op1` (\ p a -> af_product p a n))
81
77
82
78
-- | Product all of the elements in 'Array' along the specified dimension, using a default value for NaN
83
79
--
@@ -91,9 +87,9 @@ productNaN
91
87
-- ^ Dimension along which to perform product
92
88
-> Double
93
89
-- ^ Default value to use in the case of NaN
94
- -> a
90
+ -> Array a
95
91
-- ^ Will return the product of all values in the input array along the specified dimension, substituted with the default value
96
- productNaN n (fromIntegral -> i) d = getScalar ( n `op1` (\ p a -> af_product_nan p a i d) )
92
+ productNaN n (fromIntegral -> i) d = n `op1` (\ p a -> af_product_nan p a i d)
97
93
98
94
-- | Take the minimum of an 'Array' along a specific dimension
99
95
--
105
101
-- ^ Array input
106
102
-> Int
107
103
-- ^ Dimension along which to retrieve the min element
108
- -> a
104
+ -> Array a
109
105
-- ^ Will contain the minimum of all values in the input array along dim
110
- min x (fromIntegral -> n) = getScalar ( x `op1` (\ p a -> af_min p a n) )
106
+ min x (fromIntegral -> n) = x `op1` (\ p a -> af_min p a n)
111
107
112
108
-- | Take the maximum of an 'Array' along a specific dimension
113
109
--
119
115
-- ^ Array input
120
116
-> Int
121
117
-- ^ Dimension along which to retrieve the max element
122
- -> a
118
+ -> Array a
123
119
-- ^ Will contain the maximum of all values in the input array along dim
124
- max x (fromIntegral -> n) = getScalar ( x `op1` (\ p a -> af_max p a n) )
120
+ max x (fromIntegral -> n) = x `op1` (\ p a -> af_max p a n)
125
121
126
122
-- | Find if all elements in an 'Array' are 'True' along a dimension
127
123
--
@@ -133,10 +129,10 @@ allTrue
133
129
-- ^ Array input
134
130
-> Int
135
131
-- ^ Dimension along which to see if all elements are True
136
- -> Bool
132
+ -> Array a
137
133
-- ^ Will contain the maximum of all values in the input array along dim
138
134
allTrue x (fromIntegral -> n) =
139
- toEnum . fromIntegral $ getScalar @ CBool @ a ( x `op1` (\ p a -> af_all_true p a n) )
135
+ x `op1` (\ p a -> af_all_true p a n)
140
136
141
137
-- | Find if any elements in an 'Array' are 'True' along a dimension
142
138
--
@@ -148,10 +144,10 @@ anyTrue
148
144
-- ^ Array input
149
145
-> Int
150
146
-- ^ Dimension along which to see if all elements are True
151
- -> Bool
147
+ -> Array a
152
148
-- ^ Returns if all elements are true
153
149
anyTrue x (fromIntegral -> n) =
154
- toEnum . fromIntegral $ getScalar @ CBool @ a (x `op1` (\ p a -> af_any_true p a n))
150
+ (x `op1` (\ p a -> af_any_true p a n))
155
151
156
152
-- | Count elements in an 'Array' along a dimension
157
153
--
@@ -163,9 +159,9 @@ count
163
159
-- ^ Array input
164
160
-> Int
165
161
-- ^ Dimension along which to count
166
- -> Int
162
+ -> Array Int
167
163
-- ^ Count of all elements along dimension
168
- count x (fromIntegral -> n) = fromIntegral $ getScalar @ Word32 @ a ( x `op1 ` (\ p a -> af_count p a n) )
164
+ count x (fromIntegral -> n) = x `op1d ` (\ p a -> af_count p a n)
169
165
170
166
-- | Sum all elements in an 'Array' along all dimensions
171
167
--
0 commit comments