Сравнение массива по строкам, чтобы обобщить функцию argmax

#python #numpy #pseudocode #argmax

Вопрос:

Используя Python, рассмотрим массив X , содержащий 2d-данные:

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

и три массива 1d Y_A, Y_B, Y_C той же длины, X что и содержащие числа. Наконец, рассмотрим 3 пустых массива A,B,C . Как я могу заполнить эти пустые массивы A,B,C в соответствии со следующим псевдокодом?

Псевдокод:

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

Мои усилия, которые не работают:

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

Ответ №1:

Может быть, попробовать что-то вроде этого:

 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] gt; Y_B[i] and Y_A[i] gt; Y_C[i]:  A.append(X[i])  elif Y_B[i] gt; Y_A[i] and Y_B[i] gt; Y_C[i]:  B.append(X[i])  else:  C.append(X[i])  A = np.array(A) B = np.array(B) C = np.array(C)  

Вы, конечно, можете также создавать пустые массивы numpy и заполнять их во время цикла, если они имеют ту же длину, X что и .

Комментарии:

1. Я сделал нечто подобное, см. Мой отредактированный вопрос. Но я не использовал добавление. Так что я попробую сделать это сейчас.

2. Я думаю, что это так. Спасибо.