[Numpy-discussion] mean of two or more arrays while ignoring a specific value
Robert Kern
robert.kern at gmail.com
Tue Jul 14 15:47:53 EDT 2009
On Tue, Jul 14, 2009 at 14:42, Chris Colbert<sccolbert at gmail.com> wrote:
> for your particular case:
>
>>>> a = np.array([1, 5, 4, 99], 'f')
>>>> b = np.array([3, 7, 2, 8], 'f')
>>>> c = b.copy()
>>>> d = a!=99
>>>> c[d] = (a[d] + b[d])/2.
>>>> c
> array([ 2., 6., 3., 8.], dtype=float32)
>>>>
A more general answer is to use masked arrays.
In [5]: a = np.array([1, 5, 4, 99], 'f')
In [6]: b = np.array([3, 7, 2, 8], 'f')
In [7]: c = np.vstack([a,b])
In [8]: d = np.ma.masked_equal(c, 99.0)
In [9]: d
Out[9]: 8
masked_array(data =
[[1.0 5.0 4.0 --]
[3.0 7.0 2.0 8.0]],
mask =
[[False False False True]
[False False False False]],
fill_value = 1e+20)
In [10]: d.mean(axis=0)
Out[10]: 4
masked_array(data = [2.0 6.0 3.0 8.0],
mask = [False False False False],
fill_value = 1e+20)
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the NumPy-Discussion
mailing list