关于掩模2-d np.array数据的一个问题。
例如:
value
,形状为20 x 20. t = [(1,2),(3,4),(5,7),(12,13)]
如何用value
中的(y,x)掩盖二维数组index
?
通常,替换为np.nan是基于特定值,如y[y==7] = np.nan
在我的示例中,我想用 np.nan 替换值特定位置。
目前,我可以通过以下方式实现:
value_mask
value
并通过(i,j)== t [k] value_mask[i,j]
= value[i,j]
; in verse ,value_mask[i,j]
= np.nan 我的方法太笨重,特别是对于休数据(3级循环) 是否有一些效率方法来实现这一目标?任何建议都会很感激。
答案 0 :(得分:4)
你快到了。
您可以将索引数组传递给数组。您可能对1D阵列了解这一点。
对于2D数组,您需要为数组传递一个列表元组(每个轴一个元组;列表中的一个元素(必须具有相同的长度),用于您想要选择的每个数组元素)。你有一个元组列表。所以你只需转换"转换"它。
t1 = zip(*t)
为您提供索引数组的正确形状;您现在可以将其用作任何作业的索引,例如:value[t1] = np.NaN
(如果您还不了解python教程中有很多很好的解释(zip
和*
),那么
答案 1 :(得分:2)
您可以使用np.logical_and
arr = np.zeros((20,20))
您可以按location
选择,这只是示例位置。
arr[4:8,4:8] = 1
您可以创建与mask
arr
mask = np.ones((20,20)).astype(bool)
然后您可以使用np.logical_and
。
mask = np.logical_and(mask, arr == 1)
最后,您可以将1
替换为np.nan
arr[mask] = np.nan