TheM00s3 TheM00s3 - 4 months ago 9
Python Question

updating specific numpy matrix columns

I have the following list of indices

[2 4 3 4]
which correspond to my target indices. I'm creating a matrix of zeroes with the following line of code
targets = np.zeros((features.shape[0], 5))
. Im wondering if its possible to slice in such a way that I could update the specific indices all at once and set those values to 1 without a for loop, ideally the matrix would look like

([0,0,1,0,0], [0,0,0,0,1], [0,0,0,1,0], [0,0,0,0,1])

Answer

I believe you can do something like this:

targets = np.zeros((4, 5))
ind = [2, 4, 3, 4]
targets[np.arange(0, 4), ind] = 1

Here is the result:

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