pyCthon
pyCthon

Reputation: 12341

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

Lets say your numpy array is:

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

You can simply do:

A + .1

to add a number to that every element numpy array

I am looking for a way to add a number to just the odd or even indexed numbers A[::2] +1 while keeping the entire array intact.

Is it possible to add a number to all the odd or even indexed elements without any loops?

Upvotes: 15

Views: 29243

Answers (4)

Jahus
Jahus

Reputation: 73

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.

Upvotes: 0

Edward Ruchevits
Edward Ruchevits

Reputation: 6696

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

Upvotes: 17

DrGodCarl
DrGodCarl

Reputation: 1756

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]

Upvotes: 2

unutbu
unutbu

Reputation: 879591

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.])

Upvotes: 26

Related Questions