0

I have a 2D numpy array f, for example:

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

and another 2D array q, for example:

q = np.array(
   [
    [1,1,1],
    [1,1,1],
    [2,2,2],
    [3,3,3]
   ]
)

Each row in q should be added to a certain row in f, and I only have a list l of indices of rows in f, to which each row in q should be added. The length of l is equal to the number of rows in q. For example:

l = [0,2,0,0]

That means I want to do something like this:

f[l] += q

which should transform f into:

[
 [6,6,6],
 [0,0,0],
 [1,1,1]
]

i.e. I'm expecting it to do this:

f[0] += q[0]
f[2] += q[1]
f[0] += q[2]
f[0] += q[3]

but when some indices are repeated in l (index 0 in this example), it only adds the row in q that corresponds to the last repeated index in l. So instead, I get:

[
 [3,3,3],
 [0,0,0],
 [1,1,1]
]

That means it's doing this:

f[2] += q[1]
f[0] += q[3]

How can I add multiple rows in q to the same row in f, just having the list l?

1 Answer 1

2

Try np.add.at: np.add.at(f, l, q)

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.