вычисления с нан с модулем ма Numpy - PullRequest
1 голос
/ 27 октября 2011

Я не понимаю, как это numpy.ma.max (мин, среднее и т.Единственный способ получить реальное значение - это

np.nanmax(np.asarray(arr))

Это правильно, или я неправильно использую numpy.ma.max?

Ответы [ 2 ]

1 голос
/ 20 февраля 2014

Простой способ создать маску - использовать функцию np.ma.masked_invalid (см. http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_invalid.html#numpy.ma.masked_invalid)

Вот пример:

# Makes example reproducible 
np.random.seed(seed=1337)
# Generate some data
X = np.random.random((5,5))
X[X > .5] = np.nan
print X
array([[ 0.26202468,  0.15868397,  0.27812652,  0.45931689,  0.32100054],
       [        nan,  0.26194293,         nan,         nan,  0.11527423],
       [ 0.38627507,         nan,  0.12505793,         nan,  0.44322487],
       [        nan,         nan,  0.36126157,  0.41610394,         nan],
       [        nan,  0.18780841,  0.28816715,         nan,  0.49964826]])
# Mask will hide both np.nan and np.inf values
masked_X = np.ma.masked_invalid(X, copy=False)
# Voila
print np.max(masked_X, axis=0)
masked_array(data = [0.38627506863435945 0.26194292556514465 0.36126157241743073
 0.45931688721456665 0.49964826137201246],
             mask = [False False False False False],
       fill_value = 1e+20)
1 голос
/ 27 октября 2011

Вам необходимо создать маску:

import numpy as np
arr = np.ma.array([0,np.nan,1])
print(np.ma.max(arr))
# >>>nan    # since there is no mask
marr = np.ma.masked_array([0,np.nan,1], np.isnan(arr))
print(np.ma.max(marr))
# >>>1.0    # since the mask tells mask to ignore the nan. The max of the rest (0,1) is 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...