How to convert one-hot encodings into integers?

后端 未结 7 1456
夕颜
夕颜 2021-01-07 16:22

I have a numpy array data set with shape (100,10). Each row is a one-hot encoding. I want to transfer it into a nd-array with shape (100,) such that I transferred each vecto

相关标签:
7条回答
  • 2021-01-07 17:07

    Simply use np.argmax(x, axis=1)

    Example:

    import numpy as np
    array = np.array([[0, 1, 0, 0], [0, 0, 0, 1]])
    print(np.argmax(array, axis=1))
    > [1 3]
    
    0 讨论(0)
  • 2021-01-07 17:12

    You can use numpy.argmax or tf.argmax. Example:

    import numpy as np  
    a  = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]])
    print('np.argmax(a, axis=1): {0}'.format(np.argmax(a, axis=1)))
    

    output:

    np.argmax(a, axis=1): [1 0 3]
    

    You may also want to look at sklearn.preprocessing.LabelBinarizer.inverse_transform.

    0 讨论(0)
  • 2021-01-07 17:14
    def int_to_onehot(n, n_classes):
        v = [0] * n_classes
        v[n] = 1
        return v
    
    def onehot_to_int(v):
        return v.index(1)
    
    
    >>> v = int_to_onehot(2, 5)
    >>> v
    [0, 0, 1, 0, 0]
    
    
    >>> i = onehot_to_int(v)
    >>> i
    2
    
    0 讨论(0)
  • 2021-01-07 17:14

    You can use this simple code:

    a=[[0,0,0,0,0,1,0,0,0,0]]
    j=0
    for i in a[0]:
        if i==1:
            print(j)
        else:
            j+=1
    

    5

    0 讨论(0)
  • 2021-01-07 17:19

    While I strongly suggest to use numpy for speed, mpu.ml.one_hot2indices(one_hots) shows how to do it without numpy. Simply pip install mpu --user --upgrade.

    Then you can do

    >>> one_hot2indices([[1, 0], [1, 0], [0, 1]])
    [0, 0, 1]
    
    0 讨论(0)
  • 2021-01-07 17:21

    As pointed out by Franck Dernoncourt, since a one hot encoding only has a single 1 and the rest are zeros, you can use argmax for this particular example. In general, if you want to find a value in a numpy array, you'll probabaly want to consult numpy.where. Also, this stack exchange question:

    Is there a NumPy function to return the first index of something in an array?

    Since a one-hot vector is a vector with all 0s and a single 1, you can do something like this:

    >>> import numpy as np
    >>> a = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]])
    >>> [np.where(r==1)[0][0] for r in a]
    [1, 0, 3]
    

    This just builds a list of the index which is 1 for each row. The [0][0] indexing is just to ditch the structure (a tuple with an array) returned by np.where which is more than you asked for.

    For any particular row, you just want to index into a. For example in the zeroth row the 1 is found in index 1.

    >>> np.where(a[0]==1)[0][0]
    1
    
    0 讨论(0)
提交回复
热议问题