如何使用屏蔽值旁边的值的平均值替换numpy数组中的屏蔽值

时间:2022-08-28 21:44:16

What is the most efficient numpy way to replace masked values in an array with the average of the closest unmasked values next to them?

使用它们旁边最接近的未屏蔽值的平均值来替换数组中屏蔽值的最有效的numpy方法是什么?

eg:

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)

I want the masked values in b to be replaced with the average of values just next to them. Boundaries can repeat the closest unmasked value. So in this example, b will be the following:

我希望b中的掩码值替换为它们旁边的值的平均值。边界可以重复最接近的未屏蔽值。所以在这个例子中,b将是以下内容:

b = [2,3,4,4]

The main reason for this question is to see whether this can be done efficiently without the use of an iterator.

这个问题的主要原因是看看这是否可以在不使用迭代器的情况下有效地完成。

1 个解决方案

#1


-1  

you can use np.interp and np.where

你可以使用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]

#1


-1  

you can use np.interp and np.where

你可以使用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]