[Numpy-svn] r5263 - trunk/numpy/ma
numpy-svn at scipy.org
numpy-svn at scipy.org
Sun Jun 8 14:10:57 EDT 2008
Author: pierregm
Date: 2008-06-08 13:10:55 -0500 (Sun, 08 Jun 2008)
New Revision: 5263
Modified:
trunk/numpy/ma/core.py
Log:
* make_mask_none now accepts a fields argument to construct record-like masks easily
* revamped where
Modified: trunk/numpy/ma/core.py
===================================================================
--- trunk/numpy/ma/core.py 2008-06-08 12:18:37 UTC (rev 5262)
+++ trunk/numpy/ma/core.py 2008-06-08 18:10:55 UTC (rev 5263)
@@ -277,9 +277,9 @@
# Should we check for contiguity ? and a.flags['CONTIGUOUS']:
return a
elif isinstance(a, dict):
- return narray(a, 'O')
+ return np.array(a, 'O')
else:
- return narray(a)
+ return np.array(a)
#####--------------------------------------------------------------------------
def get_masked_subclass(*arrays):
@@ -730,15 +730,15 @@
return getattr(a, '_mask', nomask)
getmask = get_mask
-def getmaskarray(a):
- """Return the mask of a, if any, or a boolean array of the shape
+def getmaskarray(arr):
+ """Return the mask of arr, if any, or a boolean array of the shape
of a, full of False.
"""
- m = getmask(a)
- if m is nomask:
- m = make_mask_none(np.shape(a))
- return m
+ mask = getmask(arr)
+ if mask is nomask:
+ mask = make_mask_none(np.shape(arr), getdata(arr).dtype.names)
+ return mask
def is_mask(m):
"""Return True if m is a legal mask.
@@ -790,18 +790,21 @@
else:
return result
-def make_mask_none(newshape):
+def make_mask_none(newshape, fields=None):
"""Return a mask of shape s, filled with False.
Parameters
----------
news : tuple
A tuple indicating the shape of the final mask.
- fieldnames: {None, string sequence}, optional
+ fields: {None, string sequence}, optional
A list of field names, if needed.
"""
- result = np.zeros(newshape, dtype=MaskType)
+ if not fields:
+ result = np.zeros(newshape, dtype=MaskType)
+ else:
+ result = np.zeros(newshape, dtype=[(n, MaskType) for n in fields])
return result
def mask_or (m1, m2, copy=False, shrink=True):
@@ -817,9 +820,9 @@
First mask.
m2 : array_like
Second mask
- copy : bool
+ copy : {False, True}, optional
Whether to return a copy.
- shrink : bool
+ shrink : {True, False}, optional
Whether to shrink m to nomask if all its values are False.
"""
@@ -2865,6 +2868,7 @@
out -= self.min(axis=axis, fill_value=fill_value)
return out
+
# Array methods ---------------------------------------
copy = _arraymethod('copy')
diagonal = _arraymethod('diagonal')
@@ -3501,21 +3505,21 @@
yv = getdata(y)
if x is masked:
ndtype = yv.dtype
-# xm = np.ones(fc.shape, dtype=MaskType)
elif y is masked:
ndtype = xv.dtype
-# ym = np.ones(fc.shape, dtype=MaskType)
else:
ndtype = np.max([xv.dtype, yv.dtype])
-# xm = getmask(x)
+ # Construct an empty array and fill it
d = np.empty(fc.shape, dtype=ndtype).view(MaskedArray)
- np.putmask(d._data, fc, xv.astype(ndtype))
- np.putmask(d._data, notfc, yv.astype(ndtype))
- d._mask = np.zeros(fc.shape, dtype=MaskType)
- np.putmask(d._mask, fc, getmask(x))
- np.putmask(d._mask, notfc, getmask(y))
- d._mask |= getmaskarray(condition)
- if not d._mask.any():
+ _data = d._data
+ np.putmask(_data, fc, xv.astype(ndtype))
+ np.putmask(_data, notfc, yv.astype(ndtype))
+ # Create an empty mask and fill it
+ _mask = d._mask = np.zeros(fc.shape, dtype=MaskType)
+ np.putmask(_mask, fc, getmask(x))
+ np.putmask(_mask, notfc, getmask(y))
+ _mask |= getmaskarray(condition)
+ if not _mask.any():
d._mask = nomask
return d
More information about the Numpy-svn
mailing list