代码之家  ›  专栏  ›  技术社区  ›  konstantin

从numpy向量中随机替换索引

  •  1
  • konstantin  · 技术社区  · 7 年前

    我想创建一个方法,它将接收一个1xn大小的numpy向量,其中包含多个值,其中还包含多个nan,并将随机用nan替换非nan索引。我想要返回结果和被替换元素的索引。

    def replace_index(array):
       index = np.random.randint(array.shape[1], size=1)
       array[index] = NaN
       return array, index
    

    如何检查计算的索引是否已不是nan?

    1 回复  |  直到 7 年前
        1
  •  2
  •   akuiper    7 年前

    你可以用 numpy.where numpy.isnan 在值不是 nan ,然后使用 np.random.choice 选择一个不是 :

    array = np.array([[1,np.nan,2,np.nan,3,4]])
    
    not_nan_idx = np.random.choice(np.where(~np.isnan(array))[1])
    
    not_nan_idx
    # 2
    
    array[0, not_nan_idx] = np.nan
    
    array
    # array([[ 1., nan, nan, nan,  3.,  4.]])