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

NumPy:将一个热编码推广到k-hot编码

  •  0
  • user1518183  · 技术社区  · 7 年前

    我正在使用此代码对值进行热编码:

    idxs = np.array([1, 3, 2])
    vals = np.zeros((idxs.size, idxs.max()+1))
    vals[np.arange(idxs.size), idxs] = 1
    

    但我想将其推广到k-hot编码(其中 vals 将相同,但每行可以包含k个)。

    不幸的是,我不知道如何为每行的多个col建立索引。我试过了 vals[0:2, [[0, 1], [3]] 从第一行选择第一列和第二列,从第二行选择第三列,但不起作用。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mazdak    7 年前

    它叫 advanced-indexing .

    从第一行选择第一列和第二列,从第二行选择第三列

    您只需在单独的iterables(tuple,list)中传递相应的行和列:

    In [9]: a
    Out[9]: 
    array([[0, 1, 2, 3, 4],
           [5, 6, 7, 8, 9]])
    
    In [10]: a[[0, 0, 1],[0, 1, 3]]
    Out[10]: array([0, 1, 8])