Marion
Marion

Reputation: 289

Comparing array row-wise so as to generalize argmax function

Using Python, consider an array X containing 2d data:

X = np.array([x0,y0], ..., [xn,yn])

and three 1d arrays Y_A, Y_B, Y_C of same length as X containing numbers. Finally consider 3 empty arrays A,B,C. How can I fill these empty arrays A,B,C according to the following pseudo-code?

Pseudo-code:

for each i in range(X):
   if Y_A[i] > Y_B[i] and Y_A[i] > Y_C[i]
   store X[i] to array A
   else if Y_B[i] > Y_A[i] and Y_B[i] > Y_C[i]
   store X[i] to array B
   else store X[i] to array C

My effort which does not work:

for each i in range(len(X)):
    if Y_A[i] > Y_B[i] and Y_A[i] > Y_C[i]:
        A = Y_A
    if Y_B[i] > Y_A[i] and Y_B[i] > Y_C[i]:
        B = Y_B
    else:
        C = Y_C

Upvotes: 1

Views: 102

Answers (1)

AloneTogether
AloneTogether

Reputation: 26698

Maybe try something like this:

import numpy as np

X = np.random.random((20, 2))
Y_A = np.random.random((20))
Y_B = np.random.random((20))
Y_C = np.random.random((20))

A, B, C = [], [], [] 
for i in range(X.shape[0]):
   if Y_A[i] > Y_B[i] and Y_A[i] > Y_C[i]:
     A.append(X[i])
   elif Y_B[i] > Y_A[i] and Y_B[i] > Y_C[i]:
     B.append(X[i])
   else:
     C.append(X[i])

A = np.array(A)
B = np.array(B)
C = np.array(C)

You can, of course, also create empty numpy arrays and fill them while looping if they have the same length as X.

Upvotes: 1

Related Questions