【问题标题】:Encode an One-Hot Encoded Matrix to Single Array Integer Encoded将 One-Hot 编码矩阵编码为单个数组整数编码
【发布时间】:2020-10-29 15:53:33
【问题描述】:

我有一个现有的矩阵:

array([[0, 1, 0, ..., 0, 1, 0],
       [0, 0, 1, ..., 0, 0, 1],
       [1, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 1, 0, 0]])

我想对这些行进行编码,所以我得到一个 (1, columns) 数组,其整数对应于具有value == 1的行

预期输出

[3, 1, 2, ..., 4, 1, 2]

边缘案例(加号)

如果您想提供更多帮助,我可能会遇到矩阵如下的情况:

array([[0, 1, 0, ..., 0, 1, 0],
       [0, 0, 0, ..., 0, 0, 1],
       [1, 0, 0, ..., 0, 0, 0],
       [0, 1, 0, ..., 1, 0, 0]])

您可以看到第 1 列和第 2 列(从 0 开始索引)有 2 个值 1 或根本没有任何值。

在这些情况下,我希望它做的是:

  • 填充两行 -> 为该组合返回一个新值(例如 5,6,7)
  • 没有填充行 -> 为其返回一个新值(例如 0)

【问题讨论】:

    标签: python numpy matrix one-hot-encoding


    【解决方案1】:

    第一个问题:

    np.argmax(arr, axis=0) + 1
    

    对于扩展问题:

    def get_idx(x):
        ret = np.where(x)
        return ret[0] + 1 if len(ret[0]) else np.array([0])
    
    [get_idx(a[:,i]) for i in range(a.shape[1])]
    
    # out:
    # [array([3]), array([1, 4]), array([0]), array([4]), array([1]), array([2])]
    

    【讨论】:

    • 太棒了,第一个答案正是我所希望的。第二个答案我认为您提供的方法比我想象的要好。我只是有一个问题:为什么需要+1?
    • @VictorMaricato Python 是 0-index。
    • 那么是否只是具有非零值?
    • 因此,与您的预期输出相比,所有内容都被1 抵消,例如a[0,2]==1,但您希望3 作为输出。
    • 哦,好的。非常感谢! :)
    猜你喜欢
    • 2018-01-26
    • 2023-03-13
    • 1970-01-01
    • 2021-11-28
    • 2021-04-14
    • 2021-11-02
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多