How to set single element of multi dimensional Numpy Array using another Numpy array?

前端 未结 1 1336
长发绾君心
长发绾君心 2020-11-30 12:51

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

index         


        
相关标签:
1条回答
  • 2020-11-30 13:38

    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]]])
    
    0 讨论(0)
提交回复
热议问题