Roshan Shrestha
Roshan Shrestha

Reputation: 188

Iterate over rows, and perform addition

So, here I have a numpy array, array([[-1.228, 0.709, 0. ], [ 0. , 2.836, 0. ], [ 1.228, 0.709, 0. ]]). What my plan is to perform addition to all the rows of this array with a vector (say [1,2,3]), and then append the result onto the end of it i.e the addition of another three rows? I want to perform the same process, like 5 times, so that the vector is added only to the last three rows, which were the result of the previous calculation(addition). Any suggestions?

Upvotes: 0

Views: 64

Answers (3)

mathfux
mathfux

Reputation: 5949

If you really need to keep results within a single array, a better option is to create it at the beginning and perform operations you need on it.

arr = np.array([[-1.228, 0.709, 0. ], [ 0. , 2.836, 0. ], [ 1.228, 0.709, 0. ]])
vector = np.array([1,2,3])
N = 5    
multiarr = np.tile(arr, (1,N))
>>> multiarr
array([[-1.228,  0.709,  0.   , -1.228,  0.709,  0.   , -1.228,  0.709, 0.   , -1.228,  0.709,  0.   , -1.228,  0.709,  0.   ], 
       [ 0.   ,  2.836,  0.   ,  0.   ,  2.836,  0.   ,  0.   ,  2.836, 0.   ,  0.   ,  2.836,  0.   ,  0.   ,  2.836,  0.   ], 
       [ 1.228,  0.709,  0.   ,  1.228,  0.709,  0.   ,  1.228,  0.709, 0.   ,  1.228,  0.709,  0.   ,  1.228,  0.709,  0.   ]])
multivector = (vector * np.arange(N)[:, None]).ravel()
>>> multivector
array([ 0,  0,  0,  1,  2,  3,  2,  4,  6,  3,  6,  9,  4,  8, 12])
>>> multiarr + multivector
array([[-1.228,  0.709,  0.   , -0.228,  2.709,  3.   ,  0.772,  4.709,  6.   ,  1.772,  6.709,  9.   ,  2.772,  8.709, 12.   ],
       [ 0.   ,  2.836,  0.   ,  1.   ,  4.836,  3.   ,  2.   ,  6.836,  6.   ,  3.   ,  8.836,  9.   ,  4.   , 10.836, 12.   ],
       [ 1.228,  0.709,  0.   ,  2.228,  2.709,  3.   ,  3.228,  4.709,  6.   ,  4.228,  6.709,  9.   ,  5.228,  8.709, 12.   ]])

Upvotes: 0

Jan Christoph Terasa
Jan Christoph Terasa

Reputation: 5945

Just use np.append along the first axis:

import numpy as np

a = np.array([[-1.228, 0.709, 0. ], [ 0. , 2.836, 0. ], [ 1.228, 0.709, 0. ]])
v = np.array([1, 2, 3])

new_a = np.append(a, a+v, axis=0)

Upvotes: 1

dbac
dbac

Reputation: 341

For the addition part, just write something like a[0]+[1,2,3] (where a is your array), numpy will perform addition element-wise as expected.

For appending a=np.append(a, [line], axis=1) is what you're looking for, where line is the new line you want to add, for example the result of the previous sum.

The iteration can be easily repeated selecting the last three rows thanks to negative indexing: if you use a[-1], a[-2] and a[-3] you'll be sure to pick the last three lines

Upvotes: 1

Related Questions