#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']]