Skip to content

Commit 96c5f9e

Browse files
committed
Adding statistics functions and relevant tests
1 parent 52f2c19 commit 96c5f9e

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed

arrayfire/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
from .device import *
66
from .blas import *
77
from .arith import *
8+
from .statistics import *

arrayfire/statistics.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
from .library import *
2+
from .array import *
3+
4+
def mean(a, weights=None, dim=None):
5+
if dim is not None:
6+
out = array()
7+
8+
if weights is None:
9+
safe_call(clib.af_mean(pointer(out.arr), a.arr, c_int(dim)))
10+
else:
11+
safe_call(clib.af_mean_weighted(pointer(out.arr), a.arr, weights.arr, c_int(dim)))
12+
13+
return out
14+
else:
15+
real = c_double(0)
16+
imag = c_double(0)
17+
18+
if weights is None:
19+
safe_call(clib.af_mean_all(pointer(real), pointer(imag), a.arr))
20+
else:
21+
safe_call(clib.af_mean_all_weighted(pointer(real), pointer(imag), a.arr, weights.arr))
22+
23+
real = real.value
24+
imag = imag.value
25+
26+
return real if imag == 0 else real + imag * 1j
27+
28+
def var(a, isbiased=False, weights=None, dim=None):
29+
if dim is not None:
30+
out = array()
31+
32+
if weights is None:
33+
safe_call(clib.af_var(pointer(out.arr), a.arr, isbiased, c_int(dim)))
34+
else:
35+
safe_call(clib.af_var_weighted(pointer(out.arr), a.arr, weights.arr, c_int(dim)))
36+
37+
return out
38+
else:
39+
real = c_double(0)
40+
imag = c_double(0)
41+
42+
if weights is None:
43+
safe_call(clib.af_var_all(pointer(real), pointer(imag), a.arr, isbiased))
44+
else:
45+
safe_call(clib.af_var_all_weighted(pointer(real), pointer(imag), a.arr, weights.arr))
46+
47+
real = real.value
48+
imag = imag.value
49+
50+
return real if imag == 0 else real + imag * 1j
51+
52+
def stdev(a, dim=None):
53+
if dim is not None:
54+
out = array()
55+
safe_call(clib.af_stdev(pointer(out.arr), a.arr, c_int(dim)))
56+
return out
57+
else:
58+
real = c_double(0)
59+
imag = c_double(0)
60+
safe_call(clib.af_stdev_all(pointer(real), pointer(imag), a.arr))
61+
real = real.value
62+
imag = imag.value
63+
return real if imag == 0 else real + imag * 1j
64+
65+
def cov(a, isbiased=False, dim=None):
66+
if dim is not None:
67+
out = array()
68+
safe_call(clib.af_cov(pointer(out.arr), a.arr, isbiased, c_int(dim)))
69+
return out
70+
else:
71+
real = c_double(0)
72+
imag = c_double(0)
73+
safe_call(clib.af_cov_all(pointer(real), pointer(imag), a.arr, isbiased))
74+
real = real.value
75+
imag = imag.value
76+
return real if imag == 0 else real + imag * 1j
77+
78+
def median(a, dim=None):
79+
if dim is not None:
80+
out = array()
81+
safe_call(clib.af_median(pointer(out.arr), a.arr, c_int(dim)))
82+
return out
83+
else:
84+
real = c_double(0)
85+
imag = c_double(0)
86+
safe_call(clib.af_median_all(pointer(real), pointer(imag), a.arr))
87+
real = real.value
88+
imag = imag.value
89+
return real if imag == 0 else real + imag * 1j
90+
91+
def corrcoef(x, y):
92+
real = c_double(0)
93+
imag = c_double(0)
94+
safe_call(clib.af_corrcoef(pointer(real), pointer(imag), x.arr, y.arr))
95+
real = real.value
96+
imag = imag.value
97+
return real if imag == 0 else real + imag * 1j

tests/simple_statistics.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/python
2+
import arrayfire as af
3+
4+
a = af.randu(5, 5)
5+
b = af.randu(5, 5)
6+
w = af.randu(5, 1)
7+
8+
af.print_array(af.mean(a, dim=0))
9+
af.print_array(af.mean(a, weights=w, dim=0))
10+
print(af.mean(a))
11+
print(af.mean(a, weights=w))
12+
13+
af.print_array(af.var(a, dim=0))
14+
af.print_array(af.var(a, isbiased=True, dim=0))
15+
af.print_array(af.var(a, weights=w, dim=0))
16+
print(af.var(a))
17+
print(af.var(a, isbiased=True))
18+
print(af.var(a, weights=w))
19+
20+
af.print_array(af.stdev(a, dim=0))
21+
print(af.stdev(a))
22+
23+
af.print_array(af.var(a, dim=0))
24+
af.print_array(af.var(a, isbiased=True, dim=0))
25+
print(af.var(a))
26+
print(af.var(a, isbiased=True))
27+
28+
af.print_array(af.median(a, dim=0))
29+
print(af.median(w))
30+
31+
print(af.corrcoef(a, b))

0 commit comments

Comments
 (0)