If the input is zero I want to make an array which looks like this:
[1,0,0,0,0,0,0,0,0,0]
and if the input is 5:
[0,0,0,0,0,1,0,0,0,0]
For the above I wrote:
np.put(np.zeros(10),5,1)
but it did not work.
Is there any way in which, this can be implemented in one line?
Use
np.identify
ornp.eye
. You can try something like this with your input i, and the array size s:For example,
print(np.identity(5)[0:1])
will result:If you are using TensorFlow, you can use
tf.one_hot
: https://www.tensorflow.org/api_docs/python/array_ops/slicing_and_joining#one_hotSomething like :
Should do the trick. But I suppose there exist other solutions using numpy.
edit : the reason why your formula does not work : np.put does not return anything, it just modifies the element given in first parameter. The good answer while using
np.put()
is :The problem is that it can't be done in one line, as you need to define the array before passing it to
np.put()
The problem here is that you save your array nowhere. The
put
function works in place on the array and returns nothing. Since you never give your array a name you can not address it later. So thiswould work, but then you could just use indexing:
In my opinion that would be the correct way to do this if no special reason exists to do this as a one liner. This might also be easier to read and readable code is good code.
Usually, when you want to get a one-hot encoding for classification in machine learning, you have an array of indices.
The
one_hot_targets
is nowThe
.reshape(-1)
is there to make sure you have the right labels format (you might also have[[2], [3], [4], [0]]
). The-1
is a special value which means "put all remaining stuff in this dimension". As there is only one, it flattens the array.Copy-Paste solution
Package
You can use mpu.ml.indices2one_hot. It's tested and simple to use:
You could use List comprehension:
turns to