1

I am trying to do some computations for a numpy array by python3.

the array:

   c0 c1 c2 c3
r0 1  5  2  7
r1 3  9  4  6
r2 8  2  1  3

Here the "cx" and "rx" are column and row names.

I need to compute the difference of each element by row if the elements are not in a given column list.

e.g.

 given a column list  [0, 2, 1] # they are column indices
 which means that 
    for r0, we need to calculate the difference between the c0 and all other columns, so we have 

    [1, 5-1, 2-1, 7-1]

    for r1,  we need to calculate the difference between the c2 and all other columns, so we have 

    [3-4, 9-4, 4, 6-4]

    for r2,  we need to calculate the difference between the c1 and all other columns, so we have 

    [8-2, 2, 1-2, 3-2]

so, the result should be

   1 4 1 6
   -1 5 4 2
   6 2 -1 1

Because the array could be very large, I would like to do the calculation by numpy vectorized operation, e.g. broadcasting.

BuT, I am not sure how to do it efficiently.

I have checked Vectorizing operation on numpy array, Vectorizing a Numpy slice operation, Vectorize large NumPy multiplication, Replace For Loop with Numpy Vectorized Operation, Vectorize numpy array for loop.

But, none of them work for me.

thanks for any help !

1 Answer 1

2

Extract the values from the array first and then do subtraction:

import numpy as np

a = np.array([[1,  5,  2,  7],
[3,  9,  4,  6],
[8,  2,  1,  3]])

cols = [0,2,1]

# create the index for advanced indexing
idx = np.arange(len(a)), cols

# extract values 
vals = a[idx]

# subtract array by the values
a -= vals[:, None]

# add original values back to corresponding position
a[idx] += vals 

print(a)

#[[ 1  4  1  6]
# [-1  5  4  2]
# [ 6  2 -1  1]]

Playground

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.