关于掩码二维 np.array 数据的一个问题。

例如:

  • 一个 20 x 20 形状的二维 np.array value
  • 索引 t = [(1,2),(3,4),(5,7),(12,13)]

  • 如何通过 value 中的 (y,x) 屏蔽二维数组 index

    通常,替换 np.nan 是基于特定的值,如 y[y==7] = np.nan
    在我的示例中,我想用 np.nan 替换值特定位置。

    现在,我可以通过以下方式做到:
  • 创建一个 20 x 20 形状的新数组 value_mask
  • 循环 value 并通过 (i,j) == t[k]
  • 证明位置
  • 如果为真,value_mask[i,j] = value[i,j] ;反过来,value_mask[i,j] = np.nan

  • 我的方法太笨重,尤其是对于休数据(3 级循环)。
    是否有一些效率方法可以实现这一目标?任何建议将不胜感激。

    最佳答案

    你快到了。

    您可以将索引数组传递给数组。您可能知道一维数组的这一点。

    对于二维数组,您需要向数组传递一个列表元组(每个轴一个元组;对于您要选择的每个数组元素,列表中的一个元素(必须具有相同的长度))。你有一个元组列表。所以你只需要“转置”它。

    t1 = zip(*t)
    

    为您提供索引数组的正确形状;您现在可以将其用作任何分配的索引,例如:value[t1] = np.NaN
    (如果你还不知道,python 教程中有很多关于这个技巧的很好的解释(使用 zip* )。)

    关于python - 通过用户定义的索引用 np.nan 替换 np.array 值的最干净方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36262417/

    10-10 18:21
    查看更多