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

#python #numpy #sorting #dictionary #concatenation

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

Вопрос:

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

a = np.array([1, 4, 5, 11, 46]) , b = np.array([3, 2, 12, 14, 42]) и c = np.array([6, 23, 24, 45, 47])

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

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

[ 1 2 3 4 5 6 11 12 14 23 24 42 45 46 47]

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

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

Ответ №1:

Что вы делаете, если в a, b, c одинаковые числа в противном случае

код

итак, если в a, b, c одинаковые числа. ‘a’ будет добавлен в список. если в b одинаковые числа, c ‘b’ будет добавлен в список.

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

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

Ответ №2:

Вероятно, вы можете сделать это в меньшем количестве строк, но для удобства чтения:

 import numpy as np
a = np.array([1, 4, 5, 11, 46])
b = np.array([3, 2, 12, 14, 42])
c = np.array([6, 23, 24, 45, 47])
new = np.concatenate([a, b, c])
indices = np.concatenate([np.array(['a']*a.size),np.array(['b']*b.size),np.array(['c']*c.size)])

sorted = indices.sort()
result = indices[new.argsort()]

print(result)
 

Это дает следующий результат:

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

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

1. спасибо за ваш ответ. это сработало очень хорошо. Я изменил свой вопрос, который лучше подходит для моего реального случая, в отдельном сообщении. Этот код, который также нравится другим, занял очень много времени, и я не уверен, есть ли лучшие способы сделать это или нет.