我需要更改屏蔽区域中的数据值,使其等于最近的未屏蔽值.
NB.如果有多个最近的未屏蔽值,那么它可以采用任何最接近的值(有一个最简单的代码…)
例如
import numpyimport numpy.ma as maa = numpy.arange(100).reshape(10,10)fill_value=-99a[2:4,3:8] = fill_valuea[8,8] = fill_valuea = ma.masked_array(a,a==fill_value)>>> a [[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [20 21 22 -- -- -- -- -- 28 29] [30 31 32 -- -- -- -- -- 38 39] [40 41 42 43 44 45 46 47 48 49] [50 51 52 53 54 55 56 57 58 59] [60 61 62 63 64 65 66 67 68 69] [70 71 72 73 74 75 76 77 78 79] [80 81 82 83 84 85 86 87 -- 89] [90 91 92 93 94 95 96 97 98 99]],
>我需要它看起来像这样:
06001
NB.哪里“?”可以取任何相邻的未屏蔽值.
最有效的方法是什么?
谢谢你的帮助.
解决方法 您可以使用np.roll进行移位的副本,然后在掩码上使用布尔逻辑来识别要填充的点:import numpy as npimport numpy.ma as maa = np.arange(100).reshape(10,a==fill_value)print(a)# [[0 1 2 3 4 5 6 7 8 9]# [10 11 12 13 14 15 16 17 18 19]# [20 21 22 -- -- -- -- -- 28 29]# [30 31 32 -- -- -- -- -- 38 39]# [40 41 42 43 44 45 46 47 48 49]# [50 51 52 53 54 55 56 57 58 59]# [60 61 62 63 64 65 66 67 68 69]# [70 71 72 73 74 75 76 77 78 79]# [80 81 82 83 84 85 86 87 -- 89]# [90 91 92 93 94 95 96 97 98 99]]for shift in (-1,1): for axis in (0,1): a_shifted=np.roll(a,shift=shift,axis=axis) IDx=~a_shifted.mask * a.mask a[IDx]=a_shifted[IDx]print(a)# [[0 1 2 3 4 5 6 7 8 9]# [10 11 12 13 14 15 16 17 18 19]# [20 21 22 13 14 15 16 28 28 29]# [30 31 32 43 44 45 46 47 38 39]# [40 41 42 43 44 45 46 47 48 49]# [50 51 52 53 54 55 56 57 58 59]# [60 61 62 63 64 65 66 67 68 69]# [70 71 72 73 74 75 76 77 78 79]# [80 81 82 83 84 85 86 87 98 89]# [90 91 92 93 94 95 96 97 98 99]]
如果你想要使用更大的最近邻居,你可能会这样做:
neighbors=((0,1),(0,-1),(1,0),(-1,2),-2),(2,(-2,0))
请注意,邻居中元素的顺序很重要.你可能想要用最近的邻居填写缺失的值,而不是任何邻居.可能有一个更聪明的方式来生成邻居序列,但是我目前还没有看到它.
a_copy=a.copy()for hor_shift,vert_shift in neighbors: if not np.any(a.mask): break a_shifted=np.roll(a_copy,shift=hor_shift,axis=1) a_shifted=np.roll(a_shifted,shift=vert_shift,axis=0) IDx=~a_shifted.mask*a.mask a[IDx]=a_shifted[IDx]
请注意,np.roll高兴地将下边缘滚动到顶部,因此顶部的缺失值可能会从底部的值填充.如果这是一个问题,我将不得不考虑如何解决它.明显但不是很聪明的解决方案是使用if语句并将边缘馈入不同的可接受邻居序列…
总结以上是内存溢出为你收集整理的在Python numpy屏蔽数组中填入最近邻的缺失值?全部内容,希望文章能够帮你解决在Python numpy屏蔽数组中填入最近邻的缺失值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)