#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. спасибо за ваш ответ. это сработало очень хорошо. Я изменил свой вопрос, который лучше подходит для моего реального случая, в отдельном сообщении. Этот код, который также нравится другим, занял очень много времени, и я не уверен, есть ли лучшие способы сделать это или нет.