2015-09-08 7 views
4

Каков наиболее эффективный способ numpy для замены замаскированных значений в массиве со средним значением ближайших незамасленных значений рядом с ними?Как заменить маскированные значения из массива numpy со средними значениями сразу же после маскированного значения

например:

a = np.array([2,6,4,8]) 
b = np.ma.masked_where(a>5,a) 
print b 

masked_array(data = [2 -- 4 --], 
     mask = [False True False True], 
    fill_value = 999999) 

Я хочу маскированные значения в б заменить со средним значениями только рядом с ними. Границы могут повторять самое близкое немаркированное значение. Таким образом, в этом примере, б будет иметь следующий вид:

b = [2,3,4,4] 

Основной причиной этого вопроса, чтобы увидеть, может ли это быть сделано эффективно без использования итератора.

ответ

-1

вы можете использовать np.interp и np.where

import numpy as np 

a = np.array([2,6,4,8]) 
mymask = a>5 
b = np.ma.masked_where(mymask,a) 

print b 
# [2 -- 4 --] 

c = np.interp(np.where(mymask)[0],np.where(~mymask)[0],b[np.where(~mymask)[0]]) 
b[np.where(mymask)[0]] = c 

print b 
# [2 3 4 4]