Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r44976:117991cc4de7
Date: 2011-06-16 14:30 -0700
http://bitbucket.org/pypy/pypy/changeset/117991cc4de7/
Log: Added numpy.array.mean and numpy.mean.
diff --git a/pypy/module/micronumpy/__init__.py
b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -21,4 +21,6 @@
'sign': 'interp_ufuncs.sign',
}
- appleveldefs = {}
+ appleveldefs = {
+ 'mean': 'app_numpy.mean',
+ }
diff --git a/pypy/module/micronumpy/app_numpy.py
b/pypy/module/micronumpy/app_numpy.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/micronumpy/app_numpy.py
@@ -0,0 +1,7 @@
+import numpy
+
+
+def mean(a):
+ if not hasattr(a, "mean"):
+ a = numpy.array(a)
+ return a.mean()
\ No newline at end of file
diff --git a/pypy/module/micronumpy/interp_numarray.py
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -99,6 +99,14 @@
self.invalidated()
return self.get_concrete().descr_setitem(space, item, value)
+ def descr_mean(self, space):
+ s = 0
+ concrete = self.get_concrete()
+ for i in xrange(concrete.size):
+ s += concrete.getitem(i)
+ return space.wrap(s / concrete.size)
+
+
class FloatWrapper(BaseArray):
"""
Intermediate class representing a float literal.
@@ -324,4 +332,6 @@
__sub__ = interp2app(BaseArray.descr_sub),
__mul__ = interp2app(BaseArray.descr_mul),
__div__ = interp2app(BaseArray.descr_div),
-)
+
+ mean = interp2app(BaseArray.descr_mean),
+)
\ No newline at end of file
diff --git a/pypy/module/micronumpy/test/test_numarray.py
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -165,7 +165,7 @@
assert len(s) == 4
for i in range(4):
assert s[i] == a[2*i+1]
-
+
def test_slice_update(self):
from numpy import array
a = array(range(5))
@@ -177,17 +177,24 @@
def test_slice_invaidate(self):
- # check that slice shares invalidation list with
+ # check that slice shares invalidation list with
from numpy import array
a = array(range(5))
s = a[0:2]
b = array([10,11])
c = s + b
- a[0]=100
+ a[0] = 100
assert c[0] == 10
assert c[1] == 12
d = s + b
- a[1]=101
+ a[1] = 101
assert d[0] == 110
assert d[1] == 12
+ def test_mean(self):
+ from numpy import array, mean
+ a = array(range(5))
+ assert a.mean() == 2.0
+ assert mean(a) == 2.0
+ assert mean(range(5)) == 2.0
+ assert a[:4].mean() == 1.5
\ No newline at end of file
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit