7

If we have a numpy array like:

Array = np.zeros((2, 10, 10))

and we want to set one element of it, given by another

indexes = np.array([0,0,0])

How can we do that?

Array[indexes] = 5 

is setting every element of the FIRST dimension of Array to 5

1
  • You can also use a list (not as numpy.array): Array[0, 0, 0] = 5 only set the first zero to 5. Commented Jan 23, 2017 at 9:01

1 Answer 1

8

With a as the data array and idx as the array of indices such that each row corresponds to one element to be set in the data array, you could do -

a[tuple(idx.T)] = 5

Sample run -

In [94]: a = np.zeros((2,2,3),dtype=int)

In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]])

In [96]: a[tuple(idx.T)] = 5

In [97]: a
Out[97]: 
array([[[5, 0, 0],
        [0, 0, 5]],

       [[0, 0, 0],
        [5, 0, 0]]])

In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values

In [99]: a
Out[99]: 
array([[[ 5,  0,  0],
        [ 0,  0, 15]],

       [[ 0,  0,  0],
        [10,  0,  0]]])

Alternatively, we could compute the linear indices with np.ravel_multi_index and then perform the assignment with np.put, like so -

np.put(a,np.ravel_multi_index(idx.T,a.shape),5)

If you are dealing with three dimensional arrays, we could slice the three dimensional indices and assign to have another method, like so -

a[idx[:,0],idx[:,1],idx[:,2]] = 5

If it's just one element needed to be set, just do -

a[tuple(idx)] = 5

Sample run -

In [118]: a = np.zeros((2,2,3),dtype=int)

In [119]: idx = np.array([0,0,0])

In [120]: a[tuple(idx)] = 5

In [121]: a
Out[121]: 
array([[[5, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 0, 0]]])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.