using min or max on a masked array where the mask is a scalar True or False Fails
>>> import numpy as np >>> a = np.array([np.arange(5)]) >>> a array([[0, 1, 2, 3, 4]]) >>> m1 = np.ma.masked_values(a,1) >>> m5 = np.ma.masked_values(a,5) >>> m1 masked_array(data = [[0 -- 2 3 4]], mask = [[False True False False False]], fill_value = 1) >>> m5 masked_array(data = [[0 1 2 3 4]], mask = False, fill_value = 5) >>> a.min(axis=0) array([0, 1, 2, 3, 4]) >>> m5.min(axis=0) masked_array(data = [0 1 2 3 4], mask = False, fill_value = 999999) >>> m1.min(axis=0) masked_array(data = [0 -- 2 3 4], mask = [False True False False False], fill_value = 999999) >>> a.min(axis=1) array([0]) >>> m1.min(axis=1) masked_array(data = [0], mask = [False], fill_value = 999999) >>> m5.min(axis=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Python/2.6/site-packages/numpy/ma/core.py", line 5020, in min newmask = _mask.all(axis=axis) ValueError: axis(=1) out of bounds ### workaround >>> m5.mask = np.ma.getmaskarray(m5) >>> m1.min(axis=1) masked_array(data = [0], mask = [False], fill_value = 999999)
# replace # newmask = _mask.all(axis=axis) # with try: newmask = _mask.all(axis=axis) except: newmask = _mask
