add a number to all odd or even indexed elements in numpy array without loops

前端 未结 4 1229
后悔当初
后悔当初 2021-02-07 14:30

Lets say your numpy array is:

 A =    [1,1,2,3,4]

You can simply do:

A + .1

to add a number to tha

相关标签:
4条回答
  • 2021-02-07 14:49

    Something with list comprehension could work.

    A = [1,1,2,3,4]
    A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]
    

    Just quick and dirty with a ternary. Might not work in your version of Python, can't remember which versions it works with.


    Checked in Python 2.7.3 and Python 3.2.3, output is the same:

    >>> A = [1,1,2,3,4]
    
    >>> A
    [1, 1, 2, 3, 4]
    
    >>> A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]
    
    >>> A
    [1, 1.1, 2, 3.1, 4]
    
    0 讨论(0)
  • 2021-02-07 14:50
    In [43]: A = np.array([1,1,2,3,4], dtype = 'float')
    
    In [44]: A[::2]  += 0.1
    
    In [45]: A
    Out[45]: array([ 1.1,  1. ,  2.1,  3. ,  4.1])
    

    Note that this modifies A. If you wish to leave A unmodified, copy A first:

    In [46]: A = np.array([1,1,2,3,4], dtype = 'float')
    
    In [47]: B = A.copy()
    
    In [48]: B[::2]  += 0.1
    
    In [49]: B
    Out[49]: array([ 1.1,  1. ,  2.1,  3. ,  4.1])
    
    In [50]: A
    Out[50]: array([ 1.,  1.,  2.,  3.,  4.])
    
    0 讨论(0)
  • 2021-02-07 14:54

    In addition to previous answers, to modify numbers with odd indices you should use A[1::2] instead of A[::2]

    0 讨论(0)
  • 2021-02-07 15:15

    If the list didn't start with two 1 and you wanted to add to all even numbers, you could use:

    A[1::2] += 0.1
    

    or

    A[::-2][::-1] += 0.1
    

    In the latter case, [::-1] is used to reverse the array back to normal order.

    0 讨论(0)
提交回复
热议问题