代码之家  ›  专栏  ›  技术社区  ›  Vibhutha Kumarage

Numpy行屏蔽

  •  2
  • Vibhutha Kumarage  · 技术社区  · 9 年前

    >>> d1
    array([[  0.,   1.,   2.,  nan,   4.,   5.,  nan,   7.],
           [  8.,   9.,  10.,  nan,  12.,  13.,  nan,  15.],
           [ 16.,  17.,  18.,  nan,  20.,  21.,  nan,  23.],
           [ 24.,  25.,  26.,  nan,  28.,  29.,  30.,  31.],
           [ 32.,  33.,  34.,  35.,  36.,  37.,  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.]])
    

    面具 这将使整行成为 False

    >>> mask
    array([[False, False, False, False, False, False, False, False],
           [False, False, False, False, False, False, False, False],
           [False, False, False, False, False, False, False, False],
           [False, False, False, False, False, False, False, False],
           [ True,  True,  True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True,  True,  True]], dtype=bool)
    

    我试着用下面的口罩,但没用。

    mask = NaN not in d1[,:]
    

    有人能帮我解决这个问题吗?

    3 回复  |  直到 9 年前
        1
  •  4
  •   Divakar    9 年前

    这里有几种方法-

    np.repeat(~np.isnan(d1).any(1,keepdims=1),d1.shape[1],axis=1)
    ~np.isnan(d1).any(1,keepdims=1)*([True]*d1.shape[1])
    np.tile(~np.isnan(d1).any(1,keepdims=1),d1.shape[1])
    np.broadcast_to(~np.isnan(d1).any(1,keepdims=1), d1.shape)
    np.broadcast_to(~np.isnan(d1).any(1), d1.shape).T
    
        2
  •  1
  •   azalea    9 年前

    numpy.vectorize

    mask = lambda x: False if numpy.nan else True
    array_mask = numpy.vectorize(mask)
    masked_d1 = array_mask(d1)
    
        3
  •  1
  •   Abdel Wahab Turkmani    9 年前
    d2 = np.asarray([x for x in d1 if not np.isnan(x.sum())])
    

    使用列表理解(这会删除带有NaN的行,而不会将其替换为False,因为这是一个浮点数组)