как отобразить начальный массив после объединения и сортировки

#python #numpy #sorting #dictionary #concatenation

#python #numpy #сортировка #словарь #объединение

Вопрос:

У меня есть 3 массива

 a = np.array([[1], [4], [5], [11], [10]])
b = np.array([[14], [3], [2], [13], [12]])
c = np.array([[6], [23], [24], [8], [9]])
 

Я объединил эти массивы и отсортировал их следующим образом:

new = np.sort(np.concatenate([a, b, c], axis=1)) что приводит к:

 [[ 1  6 14]
 [ 3  4 23]
 [ 2  5 24]
 [ 8 11 13]
 [ 9 10 12]]
 

Теперь я ищу способ показать, из какого начального массива (a, b, c) выбирается каждое значение. например, я хочу получить

 [[ 'a' , 'c' , 'b']
 [ 'b' , 'a' , 'c']
 [ 'b' , 'a' , 'c']
 [ 'c' , 'a' , 'b']
 [ 'c' , 'a' , 'b']]
 

Я не уверен, правильно ли я поступаю, или мне следует использовать словари для этой цели?

Ответ №1:

Вы можете использовать numpy.argsort для объединенного массива:

 combined = np.concatenate([a, b, c], axis=1)
np.argsort(combined)

#[[0 2 1]
# [1 0 2]
# [1 0 2]
# [2 0 1]
# [2 0 1]]

vars = np.array(['a','b','c'])
vars[np.argsort(combined)]

#[['a' 'c' 'b']
# ['b' 'a' 'c']
# ['b' 'a' 'c']
# ['c' 'a' 'b']
# ['c' 'a' 'b']]